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

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

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

网页抓取挑战缩略图

如果你不了解过程中会遇到的障碍,网络爬虫可能会变成一个繁琐的过程。从反复出现的验证码到IP地址封锁,这些挑战都会阻碍你收集数据的努力。这也不足为奇,因为一些网站管理员会采取各种措施来阻止爬虫程序访问他们的域名。

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

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

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

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

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

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

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

在全面操作之前,最好先在沙盒环境中进行练习——我们已经准备了一份对网络爬虫友好的网站列表。

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

1. 速率限制

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

为了绕过速率限制,可以使用轮换代理,它会自动从大量的地址池中分配 IP 地址。当您需要快速发起大量连接请求时,轮换代理尤其有效。如果您不知道从哪里获取轮换代理,这里列出了一些最佳轮换代理服务

2. 验证码提示

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

您可以尝试绕过验证码挑战或解决它们。第一种方法包括改进您的网络爬虫的指纹识别、模拟人类行为以及使用高质量的住宅代理。要绕过验证码挑战,您可以尝试轮换 IP 地址并重新加载页面,或者使用验证码破解服务。您可以在我们的验证码绕过指南中了解更多相关信息。

3. IP 拦截

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

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

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

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

4. 网站结构变化

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

例如,网站可能会移除或重命名某些类名或元素 ID。这将导致解析器停止工作,因为它将无法再找到这些元素进行提取。谷歌搜索会不断更改其类名,以增加抓取难度。

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

5. JavaScript 密集型网站

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

像 Python 的 Requests 库这样的常规 HTML 提取工具无法处理动态页面。几年前,大多数 Twitter 爬虫都因为无法在更新后加载初始页面而失效。而无头浏览器则允许你完整渲染目标网站并提取所需数据。

6.加载速度慢

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

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

网页抓取最佳实践

首先,务必尊重您要抓取的网站。您应该阅读数据隐私规定并遵守网站的服务条款。此外,大多数网站都有一个 robots.txt 文件——它可以帮助您确定可以在目标网站上抓取哪些数据点。

另一种提取数据的方法——巧妙控制请求数量。保持连接请求之间随机间隔是一个好习惯。这样,你的请求看起来会更像真人发送。此外,你还应该避开高峰时段。数百万个连接请求会给服务器带来巨大压力,你的爬虫程序也会不堪重负。

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