编者按:互联网上有浩瀚的数据资源,要想抓取这些数据就离不开爬虫。鉴于网上免费开源的爬虫框架多如牛毛,很多人认为爬虫定是非常简单的事情。但是如果你要定期上规模地准确抓取各种大型网站的数据却是一项艰巨的挑战,其中包括网站的格式经常会变、架构必须能灵活伸缩应对规模变化同时要保持性能,与此同时还要挫败网站反机器人的手段以及维护数据质量。流行的Python爬虫框架Scrapy开发者Scrapinghub分享了他们抓取一千亿个网页后的经验之谈。
现在爬虫技术似乎是很容易的事情,但这种看法是很有迷惑性的。开源的库/框架、可视化的爬虫工具以及数据析取工具有很多,从网站抓取数据似乎易如反掌。然而,当你成规模地在网站上抓东西时,事情很快就会变得非常棘手。
自2010年以来抓取超过1000亿个产品页面,我们将会通过系列文章来分享从中学到的经验教训,让你深入了解从电子商务商店中规模析取数据时所面临的挑战,并且跟你分享应对这些挑战的某些最佳实践。
本文是该系列文章的第一篇,在这里我们将提供规模抓取产品数据所面临主要挑战的概览,以及Scrapinghub从抓取1000亿产品页面中学到的经验教训。
成立于2010年的Scrapinghub是领先的数据析取公司之一,也是当今最健壮和流行的web爬虫框架Scrapy的作者。目前Scrapinghub每月抓取许多全球**型电子商务公司的页面数超过80亿(其中30亿是产品页面)。
对于那些对规模爬取网页技术感兴趣但对要不要建立专门的web爬取团队或者外包给专门的web爬取公司的人来说,**看看这个免费指南,企业web爬虫:规模化web爬取技术指南
规模爬取技术为什么重要?
跟标准的web爬取应用不一样的是,规模爬取电子商务产品数据有一项独特挑战使得web抓取要困难许多。
本质上这些挑战可归结为两件事情:速度和数据质量。
由于时间通常是限制因素,规模抓取要求你的爬虫要以很高的速度抓取网页但又不能拖累数据质量。对速度的这张要求使得爬取大规模产品数据变得极具挑战性。
挑战1:草率而且总是在变的网站格式
这一点很明显但也许不是最性感的挑战,但是草率而一直在变的网站格式是目前为止你在规模析取数据时将会面临的**挑战。这未必是因为任务的复杂性,而是由于你要投入的时间和资源。
如果你花过时间开发过电子商务商店的爬虫的话,你就会知道电子商务网站代码之草率是一种流行病。这可不仅仅是HTML完构性或者偶尔的字符编码问题。这些年来我们遇到过形形色色的问题——HTTP响应代码的误用,损坏的JavaScript代码,或者Ajax的误用:
- 停掉产品时移除页面的商店在网站升级后突然间会在404错误处理程序返回200响应码。
- 不恰当的JSON转义破坏了部分页面的JavaScript代码(比如‘b0rk’d’),导致你需要用正则表达式来抓取那部分数据。
- 滥用Ajax调用的商店以至于你只能靠渲染该页面(这会导致爬取慢很多)或者模仿API调用(导致要付出更多的开发努力)来获得数据。
像这样草率的代码会导致编写爬虫非常痛苦,但也会使得可视化爬取工具或者自动析取不再可行。
在规模爬取的时候,你不仅要浏览成百上千个有着草率代码的网站,还将被迫应对不断演变的网站。一条好的经验法则是要预计你的目标网站每隔2到3个月就会发生让你的爬虫工作不了的变化。
这也许看起来不像是多大的事,但是当你规模抓取时,那些事件就会累积。比方说,Scrapinghub有一个规模比较大的电子商务项目大概有4000个爬虫抽取约1000个电子商务网站,意味着每天可能会经历20到30次爬虫失败。
而且网站在不同地区、语言的变化,A/B测试以及包装/定价的派生也会制造出各种问题导致爬虫失败。
闽ICP备13000641号-4