爬虫很简单么?直到我抓取了一千亿个网页后我懂!爬虫真不简单!
现在爬虫技术似乎是很容易的事情,但这种看法是很有迷惑性的。开源的库/框架、可视化的爬虫工具以及数据析取工具有很多,从网站抓取数据似乎易如反掌。然而,当你成规模地在网站上抓东西时,事情很快就会变得非常棘手。
私信小编007即可获取数十套PDF哦!
规模爬取技术为什么重要?
跟标准的web爬取应用不一样的是,规模爬取电子商务产品数据有一项独特挑战使得web抓取要困难许多。
本质上这些挑战可归结为两件事情: 速度 和 数据质量 。
挑战#1——草率而且总是在变的网站格式
这一点很明显但也许不是最性感的挑战,但是草率而一直在变的网站格式是目前为止你在规模析取数据时将会面临的最大挑战。这未必是因为任务的复杂性,而是由于你要投入的时间和资源。
没有容易的解决方案
不幸的是,不存在银弹可以彻底解决这些问题。很多时候这只是随着规模而扩大投入更多资源到你的项目上才能解决的事情。再拿上一个例子来说吧,那个项目有18名全职的爬虫工程师以及3名专职的QA工程师来确保客户总能得到可靠的数据流。
挑战 2:可伸缩的架构
你将面临的第二个挑战是建设一个可随每日请求数增长而扩充且性能不会下降的爬虫基础设施。
在规模析取产品数据时,一个串行爬取的简单web爬虫是不堪此任的。通常一个串行的web爬虫会循环发出请求,每一项请求都要2到3秒钟完成。
挑战 3:维护吞吐量性能
一级方程式的目标是将车上一切不必要的载荷都剔除掉,并且以速度之名将引擎最后一丝马力都榨干,从这个意义上来说规模抓取可以跟一级方程式相比较。规模web抓取也是一样的道理。
在析取大量数据时,在现有硬件资源条件下,你总是会想方设法要寻找请求周期最小化爬虫性能最大化的手段。这一切都是希望你能给每个请求节省下来那么几微秒的时间。
为此你的团队需要对web爬取框架、代理管理以及所使用的硬件具备深刻理解,这样才能对它们进行调整以优化性能。你还需要关注:
代理以外
不幸的是,光靠使用代理服务并不足以确保你能规避大型电子商务网站的反机器人对策。越来越多的网站正在利用复杂的反机器人对策来监控你的爬虫行为,检测其是否真人访客。
这些范机器人对策不仅使得爬取电子商务网站越来越困难,而且克服这些手段如果做得不对的话也会严重拖累爬虫性能。
这些机器人对策有很大一部分使用到了JavaScript来确定请求是否来自于爬虫还是人(Javascript引擎检查、字体枚举、WebGL与Canvas等)。
- 网站变化——目标网站发生的结构性改变是爬虫失效的主要原因。我们的专用监控系统会监控到这一点。该工具会对目标网站进行频繁的检查,确保自从上次抓取之后没有发生任何变化。如果改变被发现,它也会发出通知。
我们会在稍后的文章中专门讨论自动质量保证的细节。
总结
正如你所看到那样,规模抓取产品数据会面临一系列的独特挑战。希望这篇文章能够让你更加意识到相关挑战,并且就如何解决这些问题获得启发。
然而,这只是本系列文章的第一部分,所以如果你感兴趣的话可以注册我们的电子邮件列表,一旦下一篇文章发表了我们会第一时间通知你。
进群:125240963 即可获取数十套PDF哦!
下一篇: Java之File与递归