Posts

Showing posts from June, 2019

我们从爬取1000亿个网页中学到了什么?

AI 前线导读: 现如今,爬取网页看起来似乎是一件很简单的事。有很多开源框架或库、可视化爬取工具和数据提取工具,利用这些工具可以很容易地从网站上爬取数据。但是,当你想大规模爬取网站时,事情就变得棘手起来。其中包括应对不断变化的网站格式、构建可伸缩的爬虫基础框架并保持吞吐量,与此同时还要挫败网站反机器人的手段以及维护数据质量。在这篇文章中,流行 Python 爬虫框架 Scrapy 开发者 Scrapinghub 分享了大规模爬取产品数据时将面临的主要挑战,以及他们爬取 1000 亿个网页后的经验之谈。 更多干货内容请关注微信公众号“AI 前线”,(ID:ai-front) Scrapinghub 成立于 2010 年,是一家领先的数据公司,当今最强大、最受欢迎的网络爬取框架 Scrapy 就是由它开发的。目前,Scrapinghub 每个月为全球很多大型的电子商务公司爬取 80 亿个网页(其中有 30 亿个是产品页面)。 在进行大规模爬取时哪些东西是最重要的? 与标准的爬虫应用程序不同,大规模爬取电子商务产品数据需要面临一系列独特的挑战,这些挑战让爬取网页变得更加困难。 这些挑战可以被归结为两类:速度和数据质量。 因为时间通常是一个限制性的约束条件,所以在进行大规模爬取时要求爬虫以非常快的速度进行爬取,同时又不影响数据质量。这种对速度的极限要求使得爬取大量产品数据变得极具挑战性。 挑战之一:凌乱的代码和不断变化的网页格式 很显然,凌乱的代码和不断变化的网页格式是在大规模爬取数据时将面临的最大挑战。不一定是因为任务的复杂性,而是你要在这上面所花费的时间和资源。 如果你做过网店的爬虫,就会知道,在网店的网页中,凌乱的代码泛滥成灾。除了 HTML 格式问题或偶尔出现的字符编码问题之外,还有其他很多问题。多年来,我们遇到了各种各样的问题——滥用 HTTP 响应码、糟糕的 JavaScripts 或滥用 Ajax: 网店在停止销售某些产品时会删除相应的产品页面,但在网站升级后,404 错误处理程序却返回了 200 响应码。 错误地转义了 JSON 数据,导致某些页面上的 JavaScript 代码无法正常运行(例如’b0rk'd'),你不得不使用正则表达式来爬取数据。 滥用 Ajax,以至于你只能在