成功的网页抓取者都会遵循一些让他们在这个领域取得成功的网页抓取实践。如果你想在网页抓取领域走得更远,就必须遵循这些最佳实践。现在就来了解它们。 作为一个刚入门网页抓取的新手,你会认为自己写的小脚本可以胜任任何规模的任务,但迟早你会发现,你的脚本不仅仅只是一个概念验证,你还会意识到自己当初是多么天真。 你会发现,网页抓取这件事远比你想象的要复杂。你会发现,为了能够抓取某些网站,你需要应对大量反抓取技术;你也会知道,和其他任何领域一样,网页抓取也有它自己的最佳实践,而你若想成功,就必须遵守这些实践。 在本文中,你将学习抓取网站时应遵循的最佳实践。你还会了解在网页抓取过程中经常会遇到的常见问题,以及应当如何解决它们。 网页抓取中的常见陷阱 作为一名网页抓取者,你需要知道,在你的网页抓取实践中,有一些陷阱是你必须会遇到的。有些经常发生,有些则不那么频繁。但无论发生频率如何,你都需要了解它们。下面会讨论其中一些常见情况。 Video 3 页面 HTML 发生变化 我决定先讲这一点,因为在大多数情况下,这与网站是否试图阻止你抓取无关。然而,这却是网页抓取脚本停止工作的最常见原因之一。大多数网站通常会在一段时间后修改其布局,而一旦发生这种情况,HTML 也必然会随之变化。 这也就意味着,你的代码会崩掉并停止工作。你需要有一个系统,一旦发现页面发生变化就能立即通知你,这样你才能及时修复。有些使用分页的网站甚至会在某些分页之后更改布局,目的是让抓取器失效——这一点你也必须考虑进去。 错误地抓取了不对的数据 另一个你作为网页抓取者很可能会遇到的常见陷阱,就是抓取到了错误的数据。通常来说,如果你抓取的页面数量不多,并且能够快速检查抓取结果,那么这种问题可能不太会发生;即便发生了,你也能很快看出抓取的数据哪里有问题。 如何使用代理抓取 Linkedin 数据 使用软件抓取 Craigslist 数据的终极指南 使用代理抓取 Whois 域名数据 然而,当需要抓取的数据量很大,而你无法逐一检查时,你就必须考虑整个抓取数据的完整性与质量。这是因为其中有些数据可能并不符合你的质量标准。对此,你需要在将数据写入数据库之前,先让数据通过测试用例的检验。 反抓取技术 网站并不希望自己的数据被抓取;如果它们愿意,通常会直接提供 API 供你使用。大多数复杂网站都会部署反垃圾与防自动化系统,以阻止网页抓取器、爬虫以及其他自动化机器人访问其内容。 这些手段包括一些反抓取技术,例如 IP 跟踪与封禁、蜜罐陷阱、验证码、对网站进行 Ajax 化、浏览器指纹识别,以及许多其他方法。你将在本文后面的部分学习如何解决这些问题。 大规模抓取的问题 如果你是网页抓取领域的新手,你可能会以为抓取一个 10,000 页的网站和抓取一个 200 万页的网站是同一回事。然而,你要抓取的数据越多,就越需要谨慎和规划。一般来说,你需要明白:你需要抓取的数据越多,所花费的时间也就越长。 通常,让你的抓取器支持并发抓取,并把任务分散到不同的计算机或服务器上执行,会让整个过程更快。此外,你的数据库系统也必须具备可扩展性、速度、安全性和可靠性。否则,你会浪费大量时间在数据库查询上。Amazon Web Services(AWS)就是市场上非常好的选择之一。 正如我前面所说,任何有价值的活动都有它自己的最佳实践,网页抓取也不例外。本文这一部分将用来介绍这些最佳实践。 尊重网站的 Robots.txt 文件 大多数网站都有一个 robots.txt 文件,它们通过这个文件与爬虫、抓取器等自动化机器人沟通,告知哪些页面可以抓取,哪些页面不能抓取。它们还可能给出其他指令,例如抓取频率、请求间隔时间等。我发现,大多数网页抓取器——搜索引擎拥有的除外——都不会尊重网站的 robots.txt 文件,而是完全忽略它。事实上,有些抓取器甚至认为 robots.txt 已经过时了。 然而,把网站的 robots.txt 纳入考虑,仍然属于最佳实践之一。通常,即使你不想遵守其中禁止访问某些路径的规则,你至少也应该尊重 crawl delay(抓取延迟)这样的指令,以便更温和地对待网站服务器。你可以在自己偏好的编程语言和抓取框架中查找解析...