爬虫技术升级:如何结合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新闻网站的数据采集,还可以广泛应用于其他需要代理认证的网页数据采集任务。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

three.js能实现啥效果?看过来,这里都是它的菜(11)

Hi&#xff0c;这是three.js动画效果第十一期分享了。 在 Three.js 中创建光线流边动画可以通过使用 ShaderMaterial 和自定义的着色器程序来实现。下面是一个简单的示例代码&#xff0c;演示了如何在 Three.js 中创建光线流边动画&#xff1a; // 创建场景 var scene new T…

【Qt】事件

文章目录 1 :peach:事件介绍:peach:2 :peach:事件的处理:peach:3 :peach:按键事件:peach:3.1 :apple:单个按键:apple:3.2 :apple:组合按键:apple: 4 :peach:鼠标事件:peach:4.1 :apple:鼠标单击事件:apple:4.2 :apple:鼠标释放事件:apple:4.3 :apple:鼠标双击事件:apple:4.4 :a…

python下载安装教程(最新图文下载)__python下载

一、下载安装包 官网下载&#xff0c;下载流程参考下面截图。 下载安装python安装包&#xff0c;网盘点此下载&#xff1a;&#xff1a;点击此处直接下载 点击图片中的“Download”按钮&#xff0c;然后选择需要下载的版本&#xff0c;最后在跳转的页面中&#xff0c;选择你…

VM中Ubuntu16.04的下载以及ROS—kinetic的版本下载

一、Ubuntu镜像地址 转载备份一下&#xff1b; 官方下载地址&#xff08;不推荐&#xff09; https://www.ubuntu.com/downloadhttps://www.ubuntu.com/download 中科大源 Index of /ubuntu-releases/16.04/http://mirrors.ustc.edu.cn/ubuntu-releases/16.04/ 阿里云开…

【Leetcode 160】环形链表——双指针,细节讲解

题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&#…

Web安全:文件上传漏洞详解,文件上传漏洞原理、绕过方式和防御方案。

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

在XP/Vista系统下使用Node.js的babel-cli命令行工具转码ES6语法的js文件,让IE8浏览器也能运行

在XP系统下IE浏览器最高只能装到IE8&#xff0c;在Vista系统下最高只能装到IE9。 2015年以后&#xff0c;JavaScript新增了很多语法&#xff0c;比如class、extends&#xff0c;还有let和const等等&#xff0c;这些语法都是XP下的终端浏览器IE8所不支持的。要想让使用了这些新式…

【Django】中间件实现钩子函数预处理和后处理,局部装饰视图函数

在app文件夹里新建middleware.py继承MiddlewareMixin&#xff0c; 编写中间件类&#xff0c;重写process_request、process_response钩子函数 from django.http import HttpRequest, HttpResponse from django.utils.decorators import decorator_from_middleware from django…

NAT 网络转换

NAT(Network Address Translation) 网络地址转换 0x01 NAT 简介 为什么要使用 NAT IPv4 网络地址紧缺&#xff0c;从而出现了私有网段&#xff0c;来补充地址&#xff0c;但私有网段不课访问 internet 所以出现了 NAT 地址转换&#xff0c;将私有地址&#xff0c;转换为公网 I…

typora自动生成标题序号(修改V1.0)

目录 带序号效果图 解决方法 带序号效果图 解决方法 1.进入文件夹&#xff1a;文件–>偏好设置–>外观–>主题–>打开主题文件夹 2.如果没有base.user.css文件&#xff0c;新建一个。如果有直接用记事本打开&#xff0c;把下面代码拷贝进去保存。 /** initiali…

rfid资产管理系统如何帮助医院管理耗材的

RFID资产管理系统可以帮助医院管理耗材&#xff0c;提高耗材管理的效率和准确性。以下是它可以发挥作用的几个方面&#xff1a; 1. 实时跟踪和定位&#xff1a;使用RFID标签附加在耗材上&#xff0c;可以实时跟踪和定位耗材的位置。医院可以通过系统查询耗材的实时位置&#xf…

LeetCode - 贪心算法 (Greedy Algorithm) 集合 [分配问题、区间问题]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139242199 贪心算法&#xff0c;是在每一步选择中&#xff0c;都采取当前状态下&#xff0c;最好或最优&#xff08;即最有利&#xff09;的选择&…

(免费领源码)java#SSM#mysql第三方物流系统37852-计算机毕业设计项目选题推荐

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

mumu 模拟器安装

1.下载安装 下载地址 Win 历史版本&#xff1a;http://mumu.163.com/update/win/Mac 历史 版本&#xff1a;http://mumu.163.com/20200515/25905_880858.html 2.设置为竖屏 在设置中心--界面设置页面设置宽720&#xff0c;高1280&#xff0c;DPI为240&#xff0c;如下图所示。…

数据结构(六)队列

文章目录 一、概念二、逻辑结构&#xff1a;线性结构三、存储结构&#xff08;一&#xff09;顺序队列&#xff08;二&#xff09;循环队列1. 结构体定义2. 创建队列&#xff08;1&#xff09;函数定义&#xff08;2&#xff09;注意点&#xff08;3&#xff09;代码实现 3. 入…

windows内存管理

一 windows系统的内存管理涉及哪些 1.1 虚拟内存管理机制 windows操作系统使用虚拟内存技术&#xff0c;将磁盘文件&#xff0c;通过映射对象&#xff08;存储在物理内存&#xff09;关联&#xff0c;映射到虚拟内存作为文件试图。即用户操作"虚拟内存中File View Objec…

Android数据缓存框架 - 内存数据载体从LiveData到StateFlow

引言&#xff1a;所有成功者的背后&#xff0c;都有一份艰苦的历程&#xff0c;不要只看到了人前的风光&#xff0c;而低估了他们背后所付出的努力。 随着flow到流行度越来越高&#xff0c;有开发者呼吁我使用flow&#xff0c;于是我就如你们所愿&#xff0c;新增了StateFlow作…

Flink本地idea运行环境配置webui

Flink本地idea运行环境配置webui 1.添加依赖 <dependency><groupId>org.apache.flink</groupId><artifactId>flink-runtime-web_2.11</artifactId><version>1.13.6</version><scope>provided</scope></dependency&g…

【Qt Creator】跨平台的C++图形用户界面应用程序开发框架---QT

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1.互联网的核心岗位以及职…

【Chapter5】死锁与饥饿,计算机操作系统教程,第四版,左万利,王英

文章目录 1.1 什么是死锁1.2 死锁的类型1.2.1 竞争资源引起的死锁1.2.2 进程间通信引起的死锁1.2.3 其他原因引起的死锁 1.3 死锁产生必要条件1.4 死锁的处理策略1.5 死锁的预防1.5.1 破坏资源独占条件1.5.2 破坏不可剥夺条件1.5.3 破坏保持申请条件1.5.4 破坏循环等待条件 1.6…