爬虫技术升级:如何结合DrissionPage和Auth代理插件实现数据采集

亿牛云.png

背景/引言

在大数据时代,网络爬虫技术已经成为数据收集的重要手段之一。爬虫技术可以自动化地从互联网上收集数据,节省大量人力和时间成本。然而,当使用需要身份验证的代理服务器时,许多现有的爬虫框架并不直接支持代理认证。这就需要我们寻找替代方案,以便在爬虫过程中能够顺利通过代理认证。

本文将介绍如何使用Python中的DrissionPage库,结合Auth代理的Chrome插件,实现从163新闻网站的数据采集。我们将以亿牛云爬虫代理为例,详细演示如何在程序中配置代理,确保爬虫能够高效、安全地运行。通过实例代码,我们将展示完整的实现流程,帮助开发者掌握从目标网站采集数据的实用技巧。

正文

1. 什么是DrissionPage?

DrissionPage是一款基于Python的网页自动化工具,结合了Web浏览器自动化的便利性和requests库的高效性。其设计初衷是提供一种人性化的使用方法,提高开发和运行效率。

2. 代理认证问题

由于许多爬虫框架不支持代理认证,因此我们需要采取其他方案来解决这一问题。常见的解决方案包括:

  1. 使用本地代理服务器(如Squid)将需要认证的代理转换为不需要密码的代理。
  2. 安装支持代理认证的Chrome插件(如SwitchyOmega),在插件中配置代理认证信息,然后使用框架接管浏览器。
  3. 通过代码生成包含代理认证信息的Chrome插件,并启动新的浏览器实例。

本文将重点介绍如何使用第三种方法,通过代码生成Chrome插件来配置代理认证信息。

实例

以下代码展示了如何通过创建Chrome插件来配置代理认证,并使用DrissionPage进行网页自动化操作,采集163新闻网站的数据。此方法可以在任何支持Chrome扩展的环境中使用。

import string
import os
from DrissionPage import ChromiumOptions, ChromiumPage

# 代理服务器信息(以亿牛云爬虫代理为例)
proxyHost = "www.16yun.cn"
proxyPort = "3111"

# 代理认证信息
proxyUser = "username"
proxyPass = "password"

def create_proxy_auth_extension(proxy_host, proxy_port, proxy_username, proxy_password, scheme='http', plugin_path=None):
    # 创建Chrome插件的manifest.json文件内容
    manifest_json = """
    {
        "version": "1.0.0",
        "manifest_version": 2,
        "name": "16YUN Proxy",
        "permissions": [
            "proxy",
            "tabs",
            "unlimitedStorage",
            "storage",
            "<all_urls>",
            "webRequest",
            "webRequestBlocking"
        ],
        "background": {
            "scripts": ["background.js"]
        },
        "minimum_chrome_version":"22.0.0"
    }
    """

    # 创建Chrome插件的background.js文件内容
    background_js = string.Template(
        """
        var config = {
            mode: "fixed_servers",
            rules: {
                singleProxy: {
                    scheme: "${scheme}",
                    host: "${host}",
                    port: parseInt(${port})
                },
                bypassList: ["localhost"]
            }
        };

        chrome.proxy.settings.set({value: config, scope: "regular"}, function() {});

        function callbackFn(details) {
            return {
                authCredentials: {
                    username: "${username}",
                    password: "${password}"
                }
            };
        }

        chrome.webRequest.onAuthRequired.addListener(
            callbackFn,
            {urls: ["<all_urls>"]},
            ['blocking']
        );
        """
    ).substitute(
        host=proxy_host,
        port=proxy_port,
        username=proxy_username,
        password=proxy_password,
        scheme=scheme,
    )

    # 创建插件目录并写入manifest.json和background.js文件
    os.makedirs(plugin_path, exist_ok=True)
    with open(os.path.join(plugin_path, "manifest.json"), "w+") as f:
        f.write(manifest_json)
    with open(os.path.join(plugin_path, "background.js"), "w+") as f:
        f.write(background_js)
    
    return os.path.join(plugin_path)

# 指定插件路径
proxy_auth_plugin_path = create_proxy_auth_extension(
    plugin_path="/tmp/111",
    proxy_host=proxyHost,
    proxy_port=proxyPort,
    proxy_username=proxyUser,
    proxy_password=proxyPass
)

# 使用DrissionPage进行网页自动化,并加载代理认证插件
co = ChromiumOptions().add_extension(path=proxy_auth_plugin_path)
page = ChromiumPage(co)
page.get('https://news.163.com/')

# 打印页面标题
print(page.title)

结论

通过上述方法,我们可以有效地解决代理认证问题,并使用DrissionPage实现高效的网页自动化操作。无论是处理需要登录的网站还是复杂的JavaScript交互,DrissionPage都提供了一种简洁且高效的解决方案。结合代理认证插件的使用,可以进一步提高爬虫的隐私性和稳定性。这种方法不仅适用于163新闻网站的数据采集,还可以广泛应用于其他需要代理认证的网页数据采集任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/638073.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

5.1网安学习第五阶段第一周回顾(个人学习记录使用)

本周重点 ①日志检测与HIDS系统 ②Wazuh的应用 ③Wazuh配合syslog的应用 ④Wazuh配置邮箱预警 ⑤Wazuh与Elastic整合 ⑥Wazuh检测木马与配置 ⑦各类日志分析工具(详见笔记) 本周主要内容 ①日志检测与HIDS系统 一、安全服务工程师岗位职责 网络安全服务工程师的职责主…

【Sync FIFO介绍及基于Verilog的实现】

Sync FIFO介绍及实现 1 Intro2 Achieve2.1 DFD2.2 Intf2.3 Module 本篇博客介绍无论是编码过程中经常用到的逻辑–FIFO&#xff1b;该FIFO是基于单时钟下的同步FIFO&#xff1b; FiFO分类&#xff1a;同步FiFO VS 异步FiFO&#xff1b; 1 Intro FIFO可以自己实现&#xff0c;但…

mysqldump提示Using a password on the command line interface can be insecured的解决办法

mysql数据库备份一句话执行命令 mysqldump --all-databases -h127.0.0.1 -uroot -p123456 > allbackupfile.sql 提示如下提示 [rootyfvyy5b2on3knb8q opt]# mysqldump --all-databases -h127.0.0.1 > allbackupfile.sql mysqldump: Couldnt execute SELECT COLUMN_NA…

Unity Miscellaneous入门

概述 在Unity中有非常多好用的组件&#xff0c;也是Unity为我们提供的方便的开发工具&#xff0c;它的功能可能不是主流的内容&#xff0c;比如渲染&#xff0c;音乐&#xff0c;视频等等&#xff0c;所有Unity把这些内容统一归到了一个杂项文件组中。 Unity组件入门篇总目录-…

[AI Google] 10个即将到来的Android生态系统更新

新的体验带来了更强的防盗保护、手表电池寿命优化&#xff0c;以及对电视、汽车等的娱乐功能改进。 昨天&#xff0c;我们分享了Android如何以人工智能为核心重新构想智能手机。今天&#xff0c;我们推出了Android 15的第二个测试版&#xff0c;并分享了更多我们改进操作系统的…

经纬恒润第三代重载自动驾驶平板车

随着无人驾驶在封闭场地和干线道路场景的加速落地&#xff0c;港口作为无人化运营的先行者&#xff0c;其场景的复杂度、特殊性对无人化运营的技术提出了各种挑战。经纬恒润作为无人驾驶解决方案提供商&#xff0c;见证了港口在无人化运营方面的尝试及发展&#xff0c;并深度参…

elementUI使用el-tabs加el-form导致页面崩溃以及el-form里的input事件丢失问题

elementUI使用el-tabs加el-form导致页面崩溃以及el-form里的input事件丢失问题 解决 el-form外面包一层el-row和el-col&#xff0c;el-tabs也包一层 el-fom e-tabs

《基于Jmeter的性能测试框架搭建》改进一

《基于Jmeter的性能测试框架搭建》文末笔者提到了不少待改进之处&#xff0c;如下所示。 Grafana性能图表实时展现&#xff0c;测试过程中需实时截图形成测试报告&#xff0c;不够人性化。解决方案&#xff1a;自动生成测试报告并邮件通知。 Grafana性能图表需测试人员实时监控…

设计模式使用(成本扣除)

前言 名词解释 基础名词 订单金额&#xff1a;用户下单时支付的金额&#xff0c;这个最好理解 产品分成&#xff1a;也就是跟其他人合做以后我方能分到的金额&#xff0c;举个例子&#xff0c;比如用户订单金额是 100 块&#xff0c;我方的分成是 80%&#xff0c;那么也就是…

《Fundamentals of Power Electronics》——开关电源环路稳定性分析(下)

第二步&#xff1a;我们把控制到输出传递函数的波特图画出来&#xff0c;此时有相位和增益&#xff1b; 第三步&#xff1a;我们已经掌握了一个电源要稳定需要什么样的稳定性条件&#xff1b;

从0开始写一个环境保护网站的第3天(JAVAWEB)

1.目标 实现首页的环境保护原因的查询,和底部友情连接部分 2.实现 2.1建立数据库表格(这里数据全是百度查询) 环境保护原因表: 友情连接表:(数据来源https://zhuanlan.zhihu.com/p/696243646) 2.2前端部分可以自己写,但是我一般都是用框架中的控件,这里用的是boot…

机器学习模型可视化分析和诊断神器Yellowbrick

大家好&#xff0c;机器学习(ML)作为人工智能的核心&#xff0c;近来得到巨大应用&#xff0c;ML是使计算机能够在无需显式编程的情况下进行学习和预测或决策。ML算法通过学习历史数据模式&#xff0c;来对新的未见数据做出明智的预测或决策。然而&#xff0c;构建和训练ML模型…

Jmeter示例参数化

Jmeter示例 1.Jmeter第一个案例操作步骤 2.重点组件线程组1.添加线程组2.线程组的特点3.线程组的分类4.线程组参数详解在取样器执行错误后要执行的动作线程属性调度器配置 5.http请求6.查看结果树 3.Jmeter 参数化1.用户定义的变量场景操作步骤 2.CSV数据文件设置场景操作步骤参…

idea中显示git的Local Changes

1. 第一打开idea中的Settings文件 2. 找到Version Contro中的commint 3. 取消勾选应用即可 4. 本地提交就会显示出来

eNSP小练习一枚

问答看到的&#xff0c;随便敲了敲&#xff0c;希望各路大佬不吝赐教~ 话说现在的问答全是ai&#xff0c;乌烟瘴气的 首先配置全互通&#xff0c;ip vlan 端口隔离 ospf啥的 SWA # vlan batch 10 20 30 99 # interface Vlanif1ip address 10.1.1.2 255.255.255.0 # interf…

Linux--09---RPM 、YUM

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 RPM1 什么是RPM2 RPM包的名称格式3.RPM查询命令4.RPM卸载命令5.RPM安装命令 YUM1 什么是YUMYUM优势1.自动下载RPM包并且安装2.自动处理依赖性关系&#xff0c;并且一…

西门子CPU与汇川伺服通信与控制

西门子CPU与汇川620F伺服通信与控制 一、西门子CPU与汇川620F伺服通信与控制1、器件准备2、伺服软件设置3、PLC添加汇川伺服描述文件4、PLC编程调试5、总结 二、西门子s7-1500限位信号接到伺服的方法1、通过默认报文获取限位信号2、添加自定义报文获取限位信号3、总结 三、西门…

MySQL主从复制(一):主备一致

MySQL主备的基本原理 如图所示就是基本的主备切换流程&#xff1a; 在状态1中&#xff0c; 客户端的读写都直接访问节点A&#xff0c; 而节点B是A的备库&#xff0c; 只是将A的更新都同步过来&#xff0c; 到本地执行。 这样可以保持节点B和A的数据是相同的。 当需要切换的时候…

【AI大模型】Embedding模型解析 文本向量知识库的构建和相似度检索

&#x1f680; 作者 &#xff1a;“大数据小禅” &#x1f680; 文章简介 &#xff1a;本专栏后续将持续更新大模型相关文章&#xff0c;从开发到微调到应用&#xff0c;需要下载好的模型包可私。 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 目…