用于高级网页抓取的 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 处理的特定网页。

避免检测的先进技术

有没有人尝试过使用反抓取机制来对抗异常行为?以下是不被发现的先进技术:

  1. 轮换用户代理

网站跟踪此类代理以检测机器人和抓取工具。轮换用户代理模仿不同的设备和浏览器。

实施例:

从 fake_useragent 导入 UserAgent

标题= {

'用户代理': UserAgent().random

}

  1. 代理管理

端口会屏蔽您的 IP 地址并确保您不会遇到 IP 禁令。定期轮换代理有助于匿名。

受欢迎的代理提供商:

明亮的数据

代理网格

智能代理

在 Scrapy 中使用代理:

下载器_中间件 = {

'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware':1,

'myproject.middlewares.ProxyMiddleware':100,

}

  1. 请求限制

快速抓取是可疑的,并且最有可能被发现。使用 Scrapy AutoThrottle 在请求之间创建延迟。

配置:

AUTOTHROTTLE_ENABLED = 真

自动油门_启动_延迟 = 5

自动油门最大延迟 = 60

  1. 随机化请求标头

Referer、Accept-Language 和 Cookies 等许多字段都可以像人类一样隐藏请求。

  1. JavaScript 执行

使用 Selenium 中的无头浏览器来运行 Java 脚本以及捕获非简单/动态页面。

使用 Selenium 解决验证码和无头浏览

网络抓取的最大问题之一是通过验证码捕获的。 Selenium 的自动化功能可以解决验证码以及无头浏览。

  1. 验证码解决

使用第三方API

2Captcha 和 Anti-Captcha 等服务可以自动解决验证码问题。

实施示例:

导入请求

响应 = requests.post('https://2captcha.com/in.php', data={

“密钥”:API_KEY,

'方法': '用户验证码',

'谷歌密钥':CAPTCHA_KEY,

'pageurl': PAGE_URL

})

机器学习方法

在困难的验证码中,可以通过使用人工智能的学习模型来识别文本或模式。 TensorFlow 和 OpenCV 等程序可用于此目的。

  1. 无头浏览

无头浏览器在没有图形界面的情况下工作,这意味着抓取速度更快并且不易识别。

以硒为例:

从硒导入网络驱动程序

选项 = webdriver.ChromeOptions()

options.add_argument('–无头')

驱动程序 = webdriver.Chrome(选项=选项)

driver.get('https://example.com')

抓取动态内容:用例和示例

  1. 电子商务网站

挑战:动态产品类别和划分为页面的较小产品块。

解决方案:Scrapy用于抓取和获取同一产品的多个网页,Selenium用于渲染产品详细信息。

  1. 新闻网站

挑战:首次加载后在页面上借助 AJAX 加载的文章。

解决方案:在 Selenium 中,有一种方法可以加载当用户向下滚动页面时显示的其他文章。

  1. 社交媒体数据

挑战e:无限滚动和网站上交互元素的使用。

解决方案:要扫描页面并获取数据,selenium 的execute_script 会派上用场。

例子:

滚动暂停时间 = 2

而真实:

driver.execute_script(“window.scrollTo(0, document.body.scrollHeight);”)

时间.睡眠(SCROLL_PAUSE_TIME)

道德考虑和法律准则

  1. 尊重机器人.txt

首先,访问您想要抓取的网站并进行事先研究,以确定 robots.txt 文件中在线说明的抓取策略。

  1. 避免负载过大

抓取可能非常频繁或非常高强度,这对网页服务器不利。为了避免重大影响,请在风险管理流程中限制或插入延迟。

  1. 数据使用政策

网络抓取数据应符合 GDPR、CCPA 以及其他数据保护法律和法案。

  1. 归因

如果使用抓取的数据进行出版,应注明来源,以避免侵犯版权法。

  1. 寻求许可

只要有可能,就需要书面许可才能从网站下载信息。

常问问题

  • Scrapy 和 Selenium 可以一起使用吗?

是的,使用 Scrapy 进行爬行,然后使用 Selenium 处理动态内容会很高效。

  1. 代理如何帮助网络抓取?

他们隐藏您的 IP 地址,以避免被禁止,并为受限制的网站开放。

  • 什么是无头浏览?

无头浏览还可以在不需要图形用户界面的情况下抓取网站,因此花费的时间更少并且不引人注目。

  • 从法律角度来看,网络抓取是否存在风险?

是的,抓取数据也可能违反数据隐私法或网站服务条款。

  • 大规模抓取哪个更好:Scrapy 还是 Selenium?

通过Scrapy进行抓取速度更快,并且可以快速扩展,这使得它比适合动态页面的Selenium更适合大规模抓取。

结论

实际上,现代网站的网页抓取需要有效的Python工具和技术。 Scrapy 和 Selenium 是两个功能强大的抓取工具,涵盖静态和动态 HTML 网页抓取。新用户代理、代理服务器和验证码解决的开发是避免此类机制的有效实践。然而,在使用禁止使用和非法的网络抓取方法时,必须始终考虑道德因素。