了解如何处理六种常见的网络爬取障碍。
为什么有些网站不允许网页爬取?
提取数据存在道德和隐私问题。尽管这个过程是合法的,网站管理员还是会避开爬取工具,因为:1)他们通常不遵守网站施加的规则,
2)他们通过批量爬取数据给域带来了太多负载,
3)他们收集的信息涉及用户隐私。当然,没有人希望其他企业(或个人)获得竞争优势。
您会因为网络爬取而遇到麻烦吗?简短的回答——是的。从法律的角度来看,您可以毫无问题地爬取公开可用的数据,但即便如此,您仍将处于法律的灰色地带。如果您不确定可以(或不能)提取什么,请联系律师。
那么,您可以爬取哪些网站?
网站所有者有权决定用户可以通过 IP 地址访问哪些信息。他们还负责授予您的机器人访问数据的权限。这就是网站有一个名为robots.txt的文件的原因。这是针对爬取工具的说明,显示您可以爬取网站上的哪些元素。
因此,首先要做的就是 在 URL 后输入/robots.txt 来检查该网站是否允许爬取。如果您需要爬取网站禁止的某些元素,您可以联系网站所有者并请求许可。但实际上,robots.txt 通常是仅考虑 Google 的情况而制作的,因此它们可能并不总是代表网站管理员的意图。
在进行全方位练习之前,在沙箱中进行练习总是一个好主意 – 我们准备了一份对网络爬取工具友好的网站列表。
您需要注意的网络爬取挑战
1. 速率限制
速率限制是对抗爬虫的一种流行方法。其工作方式很简单:网站强制用户可以通过单个 IP 地址执行有限数量的操作。这些限制可能因网站而异,并且基于 1) 在特定时间内执行的操作数量或 2) 您使用的数据量。
为了克服速率限制,请使用轮换代理,它会自动为您提供来自大量地址的 IP。当您需要快速发出许多连接请求时,它们特别有效。如果您不知道从哪里获得,这里有一份最佳轮换代理服务列表。
2. 验证码提示
验证码是另一种更复杂的方法,用于限制网络爬取。您可以通过以下方式触发验证码:1) 短时间内发出过多请求,2) 未正确覆盖网络爬取工具的指纹,或 3) 使用低质量代理。验证码也可以硬编码到 HTML 标记中。如果是这种情况,无论您做什么,测试都会出现在某些页面上,例如注册表或结帐页面。
您可以尝试避免验证码挑战或解决它们。第一种方法涉及改进网络爬取工具的指纹、模仿人类行为以及使用优质住宅代理。要克服验证码挑战,您可以尝试轮换 IP 地址并重新加载页面或使用验证码解决服务。您可以在我们的绕过验证码指南中了解有关该主题的更多信息。
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.加载速度慢
当网站在短时间内收到大量请求时,其加载速度可能会变慢并且变得不稳定。在某些情况下,您的请求可能只是超时。如果您经常浏览,可以随时尝试刷新页面。然而,在网络爬取的情况下,这样做会中断你的爬取工具,因为它可能不知道如何处理这种情况。
克服此障碍的一种方法是在代码中添加重试功能,如果发现网站无法满足请求,该功能将自动重新加载页面。请记住不要过度这样做,以防止服务器进一步超载。