in

网络爬虫的最佳实践:成功进行网页爬取的终极指南

网络爬虫的最佳实践

我们准备了一些在收集数据时会派上用场的技巧和窍门。

众所周知,网站通过使用各种反爬虫技术如速率限制或IP地址封禁来监控机器人。这些和其他阻碍可能决定您在收集所需数据方面的成功与否。但有时候,你只需要等价的知识和一些提示来避免途中的挑战。

从IP地址和用户代理轮换到处理重定向和改善数字指纹,即使是爬取大神们也会寻找有效的指导方针。我们整理了最佳网络爬虫实践,以帮助您应对IP封锁、请求限制甚至像网站结构变化这样的技术问题。继续阅读本指南,并装备自己以遵循最佳网络爬虫实践。

网站如何检测网络爬虫?

如果你观察一下人们的浏览方式,你会发现这种模式是混乱的。相反,机器人是可预测的——单调且比实际用户快得多。这是一个致命的泄露,因为网站可以通过跟踪您的 IP 地址(您在特定时间范围内发出的连接请求的数量和模式)来监控流量。任何不寻常的活动都会升起旗帜。

但这还不是全部。网站还可以使用各种指纹识别方法来识别您的设备和软件特征。例如,他们可以通过在 HTTP 请求标头(如 cookie 或用户代理)中发送的标识符来精确定位网络爬虫。最先进的指纹识别技术甚至可以跟踪页面上的鼠标移动来确定用户是否是机器人。

有关网页爬取的挑战

网站处理不需要的访问者的一种方法是阻止他们的 IP 地址。有些甚至可能禁止整个 IP 范围 – 来自同一子网的256 个 IP 。当您使用数据中心代理时,通常会发生这种情况。

有些网站的反应是限制您的连接请求,这意味着您在一段时间内无法收集数据。并且时间范围根据目标服务器的不同而不同。这会减慢您的抓取速度,如果您继续进行不需要的行为,可能会导致 IP 地址被禁止。

网页爬取最佳实践

1.考虑网站的指南

将网站想象成某人的家 – 它有需要遵守的规则。大多数网站都设置了名为robots.txt的管理机器人流量的说明。它们概述了哪些页面可以抓取、可以抓取的频率以及哪些页面无法抓取。

另一个重要准则 – 您应该阅读服务条款 (ToS),它充当您与目标网站之间的合同。某些 ToS 涉及明确禁止您从域中提取任何数据的抓取策略。这些规则很少具有法律约束力,但如果您不小心,它们可能会给您带来麻烦。

如果你应该记住一件事,那就是不要在登录后抓取数据——尤其是在社交媒体平台上。这已经引起了多起诉讼,并使您面临相当大的风险。

2. 礼貌地爬取

大多数网络抓取工具可以运行数百个并发请求。问题是,较小的网站没有资源来处理这么大的负载。因此,如果您过于频繁地访问他们的服务器,您可能会意外地崩溃。

为了避免这种情况,您应该适应目标的功能:在请求之间添加延迟,在非高峰时段收集数据,并且一般不要成为负担。这样做会让每个人的体验更好。

3. 发现 API 端点

网站变得更加直观和优化,可以在任何设备上查看,包括计算机、平板电脑和智能手机。它们使用客户端渲染——使用 JavaScript 在浏览器中直接渲染 HTML 页面。这使得诸如延迟加载或无限滚动之类的事情变得复杂,从而使网络抓取过程变得复杂。

但这也有好的一面:交互式网站通常通过后端 API 获取元素。内容采用 .json 格式,JavaScript 将一切就位。即使网站没有记录的 API,它也可能会提供您可以使用的“隐藏”API。

通常,在抓取 JavaScript 渲染的网站时,您只能通过加载 JavaScript,然后解析 HTML 来获取数据。但是,如果您设法通过检查请求来对 API 端点进行逆向工程,则可以获得结构化数据,同时使用更少的带宽。寻找GraphQL 端点——它可能是处理动态网站中的大型数据集的最流行的方法。

4. 轮换您的 IP 地址

网络抓取需要在短时间内发出许多连接请求。数百个蜘蛛让您的服务器超载并不有趣,因此网站会施加请求限制,使用验证码等反抓取技术,甚至阻止 IP 地址。但我们有一个解决方案,称为IP 轮换。

进行 IP 轮换的一种方法是使用代理。我建议选择一个轮换代理提供商,它会根据每个连接请求自动轮换您的代理 IP。尽量避免粘性会话,除非您的工作流程要求您对连续多个请求保持相同的身份。另请注意,某些块 IP 来自云托管服务(数据中心代理),因此您可能需要使用住宅地址。

5.知道何时使用无头浏览器

无头浏览器就像普通的网络浏览器(Chrome 或 Firefox),只是没有用户界面。当谈到网页爬取时,有两种方法可以使用无头浏览器:要么它是一个必不可少的工具,要么与您的项目的成功无关。

如果您正在处理 JavaScript 渲染的网站,常规的 HTML 提取工具将没有任何帮助。服务器可以通过检查是否可以呈现 JavaScript 来识别请求何时来自真实的浏览器。无头浏览器完全能够加载动态AJAX 页面,同时模仿真实的浏览器并克服浏览器指纹识别。

但如果网站不依赖动态元素来显示内容,或者不依赖基于 JavaScript 的指纹识别方法,那么使用无头浏览器只会减慢速度。在这种情况下,Beautiful Soup 和 Requests 等库的速度更快。

6. 改进浏览器的指纹识别

从网络浏览器发出的请求包含一组标头,这些标头显示您的首选项和软件信息。其中一个标头(用户代理字符串)尤其重要:如果它丢失或格式错误,目标将拒绝为您的网络抓取工具提供服务。这适用于大多数 HTTP 客户端,例如请求,它们发送自己的用户代理标头。不要忘记更改它!

此外,始终使用相同的用户代理字符串可能不是一个好主意,因为网站监视来自同一浏览器的请求。出路是轮换你的用户代理。您应该收集最新网络浏览器的用户代理并循环访问它们。

除了用户代理之外,还有更多标头需要考虑。例如,某些网站需要 cookie,如果添加引用标头,您将有更好的机会在其他网站上取得成功。

7. 维护你的网络爬虫

当您购买预制的爬取工具时,您订阅的服务将负责维护。然而,定制软件需要您(或您的同事)的持续监督。造成这种情况的主要原因有两个:1) 它是工具的拼凑而成,2) Web 开发人员经常对网站进行结构更改。

首先,自建的刮刀是由不同的部件制成的。因此,一个或多个元素迟早可能会失败是现实的,您需要解决该问题。例如,您的代理服务器可能会宕机,或者网络抓取工具可能会遇到不知道如何处理的情况。

其次,网站管理员经常进行结构更改,这可能会影响抓取工具的功能。这可以包括新的保护方法或简单地重新排列 HTML 结构来破坏您的解析代码。随着时间的推移,您需要在旧结构之上添加新功能并运行测试以查看刮刀是否可以正常运行。此外,请密切关注丢失或修改的字段名称等更改。这将防止您失去数据质量。

8. 表现自然

人类和机器人行为之间的主要区别在于,人类行动缓慢且不可预测,而机器人速度非常快,并且被编程为特定的爬行模式。

为了看起来更人性化,您应该通过更改请求之间的时间间隔或单击网站上的特定元素来降低抓取速度。如果您使用的是无头浏览器,您还可以添加随机活动,例如鼠标移动。不可预测的操作将使服务器更难将您识别为机器人。

改进抓取机器人的其他技巧

在您的抓取工具全部设置并运行后,有更多方法可以改进您的脚本。

缓存 HTTP 请求。价格聚合等任务需要抓取多个页面,这意味着您必须浏览许多网站 URL。这就是爬取发挥作用的地方 – 您构建爬行逻辑以从多个页面提取特定数据。然而,当您想知道爬虫已经访问过哪些页面,或者您需要稍后重新访问这些页面以获取更多数据时,这个过程就会变得有点负担。通过存储对数据库的响应,您将避免将来请求相同的页面。

使用规范的 URL。有些网站有多个指向相同内容的 URL。当它们同时包含桌面版和移动版时,通常会发生这种情况:例如,www.instagram.com 和 https://m.instagram.com。规范 URL 或规范标签是一个 HTML 片段,用于定义重复项(或接近重复项)的主版本。rel=”canonical” 元素可帮助开发人员检测并避免重复页面。像 Scrapy 这样的框架默认处理相同的 URL。

处理重定向。HTML 重定向或转发是将用户从一个 URL 重定向到另一个 URL 的方法。HTML 重定向会使抓取工具感到困惑并导致速度变慢。基于 Python 的抓取库(例如 Requests)通常默认遵循重定向,但提供了不遵循重定向的选项。像 Scrapy 这样的网络抓取框架有重定向中间件来处理它们。

blank

Written by 爬取 大师

阿里P12级别选手,能够突破各种反爬, 全能的爬取大师,擅长百万级的数据抓取!没有不能爬,只有你不敢想,有爬取项目可以联系我邮箱 [email protected] (带需求和预算哈, 不然多半不回复)