用于高级网页抓取的 Python:使用 Scrapy 和 Selenium 绕过反抓取机制
已发表: 2025-01-09目录
用于高级网页抓取的 Python:使用 Scrapy 和 Selenium 绕过反抓取机制
介绍
因此,网络抓取已成为数据挖掘的重要方法。然而,值得注意的是,当今的网站受到先进的反抓取合规系统的保护,可以防止此类过程。这篇博文将深入探讨 Python 与 Scrapy 和 Selenium 如何帮助开发人员抓取数据,特别是从高度保护的网站中抓取数据。让我们探索Python Web 开发服务的创新方法来克服验证码、逃避检测和维护道德行为。
Scrapy 与 Selenium:详细比较
刮痧
Scrapy 是一个简单的 Python 网络级蜘蛛框架。它的优势最能体现在它处理静态网站和抓取大量数据的能力。
优势:
速度:与其他抓取工具不同,Scrapy 依赖于异步请求,这提高了抓取速度。
可定制性:它具有用于获取和清理数据的管道。
可扩展性:在抓取时非常有帮助,这涉及多个提供大量数据的网站。
内置功能:包含处理 robots.txt、cookie 和标头的方法。
- 硒
Selenium 是一款专为浏览器自动化而构建的工具,专门用于动态和交互式网站。
优势:
动态内容处理:当涉及富含 JavaScript 的页面时,Selenium 表现最好。
交互性:允许用户使用鼠标单击、键盘输入以及滚动滚轮或栏。
验证码解决:最适合需要测试用户对系统的使用情况。
可视化调试:调试时,可以从开发人员的角度查看渲染的页面。
当我们决定使用 Scrapy 还是 Selenium 时,我们在做出决定时会考虑以下几个因素。
静态网站:使用 Scrapy 提高效率。
动态网站:抓取由 JavaScript 开发的内容最好由 selenium 完成。
混合方法:使用 Scrapy 执行一般的网页抓取任务,然后使用 Selenium 执行需要 Javascript 处理的特定网页。
避免检测的先进技术
有没有人尝试过使用反抓取机制来对抗异常行为?以下是不被发现的先进技术:
轮换用户代理
网站跟踪此类代理以检测机器人和抓取工具。轮换用户代理模仿不同的设备和浏览器。
实施例:
从 fake_useragent 导入 UserAgent
标题= {
'用户代理': UserAgent().random
}
代理管理
端口会屏蔽您的 IP 地址并确保您不会遇到 IP 禁令。定期轮换代理有助于匿名。
受欢迎的代理提供商:
明亮的数据
代理网格
智能代理
在 Scrapy 中使用代理:
下载器_中间件 = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':1,
'myproject.middlewares.ProxyMiddleware':100,
}
请求限制
快速抓取是可疑的,并且最有可能被发现。使用 Scrapy AutoThrottle 在请求之间创建延迟。
配置:
AUTOTHROTTLE_ENABLED = 真
自动油门_启动_延迟 = 5
自动油门最大延迟 = 60
随机化请求标头
Referer、Accept-Language 和 Cookies 等许多字段都可以像人类一样隐藏请求。
JavaScript 执行
使用 Selenium 中的无头浏览器来运行 Java 脚本以及捕获非简单/动态页面。
使用 Selenium 解决验证码和无头浏览
网络抓取的最大问题之一是通过验证码捕获的。 Selenium 的自动化功能可以解决验证码以及无头浏览。
验证码解决
使用第三方API
2Captcha 和 Anti-Captcha 等服务可以自动解决验证码问题。
实施示例:
导入请求
响应 = requests.post('https://2captcha.com/in.php', data={
“密钥”:API_KEY,
'方法': '用户验证码',
'谷歌密钥':CAPTCHA_KEY,
'pageurl': PAGE_URL
})
机器学习方法
在困难的验证码中,可以通过使用人工智能的学习模型来识别文本或模式。 TensorFlow 和 OpenCV 等程序可用于此目的。
无头浏览
无头浏览器在没有图形界面的情况下工作,这意味着抓取速度更快并且不易识别。
以硒为例:
从硒导入网络驱动程序
选项 = webdriver.ChromeOptions()
options.add_argument('–无头')
驱动程序 = webdriver.Chrome(选项=选项)
driver.get('https://example.com')
抓取动态内容:用例和示例
电子商务网站
挑战:动态产品类别和划分为页面的较小产品块。
解决方案:Scrapy用于抓取和获取同一产品的多个网页,Selenium用于渲染产品详细信息。
新闻网站
挑战:首次加载后在页面上借助 AJAX 加载的文章。
解决方案:在 Selenium 中,有一种方法可以加载当用户向下滚动页面时显示的其他文章。
社交媒体数据
挑战e:无限滚动和网站上交互元素的使用。
解决方案:要扫描页面并获取数据,selenium 的execute_script 会派上用场。
例子:
滚动暂停时间 = 2
而真实:
driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)
时间.睡眠(SCROLL_PAUSE_TIME)
道德考虑和法律准则
尊重机器人.txt
首先,访问您想要抓取的网站并进行事先研究,以确定 robots.txt 文件中在线说明的抓取策略。
避免负载过大
抓取可能非常频繁或非常高强度,这对网页服务器不利。为了避免重大影响,请在风险管理流程中限制或插入延迟。
数据使用政策
网络抓取数据应符合 GDPR、CCPA 以及其他数据保护法律和法案。
归因
如果使用抓取的数据进行出版,应注明来源,以避免侵犯版权法。
寻求许可
只要有可能,就需要书面许可才能从网站下载信息。
常问问题
- Scrapy 和 Selenium 可以一起使用吗?
是的,使用 Scrapy 进行爬行,然后使用 Selenium 处理动态内容会很高效。
- 代理如何帮助网络抓取?
他们隐藏您的 IP 地址,以避免被禁止,并为受限制的网站开放。
- 什么是无头浏览?
无头浏览还可以在不需要图形用户界面的情况下抓取网站,因此花费的时间更少并且不引人注目。
- 从法律角度来看,网络抓取是否存在风险?
是的,抓取数据也可能违反数据隐私法或网站服务条款。
- 大规模抓取哪个更好:Scrapy 还是 Selenium?
通过Scrapy进行抓取速度更快,并且可以快速扩展,这使得它比适合动态页面的Selenium更适合大规模抓取。
结论
实际上,现代网站的网页抓取需要有效的Python工具和技术。 Scrapy 和 Selenium 是两个功能强大的抓取工具,涵盖静态和动态 HTML 网页抓取。新用户代理、代理服务器和验证码解决的开发是避免此类机制的有效实践。然而,在使用禁止使用和非法的网络抓取方法时,必须始终考虑道德因素。