正如Linkedin 诉 HiQ案件的司法管辖区所证实的那样。然而,我为自己设定了一套道德规则,在开始一个新的网络抓取项目时我喜欢遵守这些规则。这包括:
检查 robots.txt 文件。
它通常包含有关页面所有者网站的哪些部分可以被机器人和爬虫访问的明确信息,并突出显示不应访问的部分。
阅读条款和条件。
与 robots.txt 相比,这条信息的使用频率并不低,但通常会说明他们如何对待数据抓取工具。
以中等速度刮擦。
抓取会在目标站点的基础设施上创建服务器负载。根
国家电子邮件列表 据您抓取的内容以及您的抓取器运行的并发级别,流量可能会给目标站点的服务器基础架构带来问题。当然,服务器容量在此等式中起着重要作用。因此,我的爬虫速度始终是我要爬取的数据量与目标站点的受欢迎程度之间的平衡。找到这种平衡可以通过回答一个问题来实现:“计划的速度是否会显着改变网站的自然流量?”。如果我不确定网站的自然流量,我会使用ahrefs之类的工具来大致了解一下。
选择正确的技术
事实上,使用无头浏览器进行抓取是您可以使用的性能最低的技术之一,因为它会严重影响您的基础架构。您机器处理器的一个内核大约可以处理一个 Chrome 实例。
让我们做一个快速的示例计算,看看这对现实世界的网络抓取项目意味着什么。
场景 #
你想抓取 20,000 个 URL。
目标站点的平均响应时间为 6 秒。
您的服务器有 2 个 CPU 内核。
该项目将需要16 个小时才能完成。
因此,在对动态网站进行抓取可行性测试时,我总是尽量避免使用浏览器。
这是我经常检查的一个小清单:
我可以通过 URL 中的 GET 参数强制要求页面状态吗?如果是,我们可以简单地运行带有附加参数的 HTTP 请求。
页面源的动态信息部分是否可以通过 DOM 中某处的 JavaScript 对象获得?如果是,我们可以再次使用普通的 HTTP 请求并解析来自字符串化对象的数据。
数据是通过 XHR 请求获取的吗?如果是这样,我可以直接使用 HTTP 客户端访问端点吗?如果是,我们可以直接向端点发送 HTTP 请求。很多时候,响应甚至采用 JSON 格式,这让我们的生活变得更加轻松。