我们使用联盟链接。它们让我们能够维持运营,而您无需承担任何费用。

网页抓取的主要挑战及解决方法

了解如何处理六种常见的网络抓取障碍。

网页抓取挑战缩略图

网页抓取 如果您不了解沿途的障碍,这可能会成为一个繁琐的过程。从重新出现的 CAPTCHA 到 IP 地址阻止,这些挑战可能会阻碍您收集数据的努力。这是可以预见的,因为一些网站管理员竭尽全力阻止抓取工具访问他们的域。

然后是技术方面——网站会不断经历结构变化或在高峰时段经历不稳定的加载速度,这意味着您必须针对每个小配置调整您的抓取工具。

因此,主要问题是 – 您如何克服这些障碍?继续阅读本指南,了解您可能遇到的常见网页抓取挑战以及如何绕过它们。

为什么有些网站不允许网页抓取?

提取数据存在道德和隐私方面的担忧。尽管这一过程是合法的,但网站管理员仍会避开抓取工具,因为:1) 它们通常不遵守网站规定的规则,2) 它们通过大量抓取数据给域带来过多负载,3) 它们收集与用户隐私相关的信息。当然,没有人希望其他企业(或个人)获得竞争优势。 

您会因为网络抓取而惹上麻烦吗?简短回答:会。从法律角度来看,您可以毫无问题地抓取公开可用的数据,但即便如此,您仍将处于法律灰色地带。如果您不确定可以(或不能)提取什么,请联系律师。 

那么,您可以抓取哪些网站?

网站所有者有权决定用户可以通过 IP 地址访问哪些信息。他们还负责授予您的机器人访问数据的权限。这就是为什么网站有一个名为 的robots.txt。这是抓取工具的说明,显示网站上可以抓取的元素。因此,要做的第一件事是输入以下内容来检查网站是否允许抓取 /机器人.txt 在 URL 之后。如果您需要抓取网站禁止的某些元素,您可以联系网站所有者并请求许可。但实际上,robots.txt 通常只针对 Google 而制作,因此它们可能并不总是代表网站管理员的意图。
的robots.txt

在全面展开之前,在沙箱中练习总是一个好主意——我们已经准备好了 网站列表 对网络爬虫很友好。

您需要注意的网页抓取挑战

1. 速率限制

速率限制是打击爬虫的一种常用方法。其工作原理很简单:网站对用户从单个 IP 地址执行的操作数量进行限制。限制可能因网站而异,并基于 1) 在一定时间段内执行的操作数量或 2) 您使用的数据量。 

要克服速率限制,请使用 轮换代理 它会自动从大量地址池中为您提供 IP。当您需要快速发出许多连接请求时,它们特别有效。如果您不知道从哪里获取 IP,以下是 最佳轮换代理服务.

2. 验证码提示

CAPTCHA 是另一种更复杂的限制网络抓取的方法。您可以通过以下方式触发 CAPTCHA:1) 在短时间内发出过多请求,2) 未正确覆盖网络抓取器的指纹,或 3) 使用低质量代理。CAPTCHA 也可以硬编码到 HTML 标记中。如果是这种情况,无论您做什么,测试都会出现在某些页面上,例如注册表单或结帐。

您可以尝试避免或解决 CAPTCHA 挑战。第一种方法涉及改进网络抓取工具的指纹,模仿人类行为,并使用质量 住宅代理。为了克服 CAPTCHA 挑战,您可以尝试 旋转你的IP地址 并重新加载页面或使用 CAPTCHA 解决服务。您可以在我们的指南中了解有关该主题的更多信息 绕过验证码.

3. IP 拦截

最糟糕的情况是您的 IP 地址因类似机器人的活动而被列入黑名单。这种情况大多发生在社交媒体等受到良好保护的网站上。 

被 IP 封禁的主要原因是,你继续无视请求限制,或者网站的保护机制明确将你标记为机器人。网站可以封禁一个 IP 或整个地址范围(256 个 IP 的封禁,也称为 子网)。后者通常发生在您使用 数据中心代理 来自相关子网。 

另一个原因是您的 IP 地址来自网站限制的位置。这可能是由于您所在国家/地区实施的禁令,或者网站管理员可能不希望您所在位置的访问者访问其内容。 

您可以使用与速率限制相同的方法来克服 IP 阻止 - 通过更改您的 IP 地址。 

4. 网站结构变化

网站并非一成不变,尤其是当您抓取大型电子商务网站时。它们经常会更改 HTML 标记,这有破坏您的网页抓取脚本的风险。 

例如,网站可以删除或重命名某些类或元素 ID。这将导致您的 解析器 停止工作,因为它将无法再找到要提取的元素。Google 搜索不断更改其类名,使抓取变得更加困难。

除非您愿意构建一个使用机器学习来适应的弹性解析器,否则进行结构更改的最佳方式就是简单地维护您的网络抓取工具。不要将您编写的代码视为理所当然,一旦出现问题就更新它。

5. JavaScript 密集型网站

Facebook、Twitter、单页应用程序和类似的交互式网站都使用 JavaScript (JS) 呈现到浏览器上。这带来了无限滚动和延迟加载等实用功能。然而,这对网络爬虫来说也是一个坏消息,因为内容只有在 JavaScript 代码运行后才会出现。 

常规 HTML 提取工具(如 Python 的 Requests 库)不具备处理动态页面的功能。几年前,大多数 Twitter 抓取工具都崩溃了,因为它们在更新后甚至无法通过初始加载屏幕。 无头浏览器另一方面,将让您完全呈现目标网站并提取所需的数据。

6.加载速度慢

当网站在短时间内收到大量请求时,其加载速度可能会变慢并变得不稳定。在某些情况下,您的请求可能会超时。如果您经常浏览,您可以随时尝试刷新页面。但是,在网页抓取的情况下,这样做会中断您的抓取工具,因为它可能不知道如何处理这种情况。

克服这一障碍的一种方法是将重试功能添加到代码中,如果代码识别出网站无法处理请求,它将自动重新加载页面。请记住不要过度使用此功能,以防止服务器进一步过载。 

网页抓取最佳实践

首先, 尊重你正在抓取的网站。您应该阅读数据隐私条例并尊重网站的服务条款。此外,大多数网站都有一个 robots.txt 文件 - 它将帮助您识别可以在目标网站上抓取哪些数据点。 

提取数据的另一种方法—— 明智地选择发送请求的数量。保持连接请求之间的随机间隔是一种很好的做法。这样,您看起来就像一个真人。您还应该在高峰时段保持距离。数百万个连接请求会给服务器带来负担。可以预见的是,您的抓取工具也会如此。

Adam Dubois 的图片
亚当·杜波依斯
代理极客和开发人员。