大数据采集之从千亿页面上提取数据所总结的五大经验
沉沙 2019-02-20 来源 : 阅读 616 评论 0

摘要:本篇文章探讨了大数据采集之从千亿页面上提取数据所总结的五大经验,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇文章探讨了大数据采集之从千亿页面上提取数据所总结的五大经验,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

大数据采集之从千亿页面上提取数据所总结的五大经验


如今从网上抓取数据看似非常容易。有许多开源库和框架、可视化抓取工具和数据提取工具,可以很容易地从一个网站上抓取数据。但是,当你想大规模地搜索网站时,很快就会感觉到非常棘手。

本文中,我们将与你分享自2010年以来借助Scrapinghub从一千亿个产品页面上抓取数据时所学到的经验教训,让你深入了解从电子商务店铺大规模提取产品数据时面临的挑战,并与你分享一些应对这些挑战的最佳实践经验。

Scrapinghub成立于2010年,是数据提取公司中的佼佼者之一,也是Scrapy的缔造者——Scrapy是当今最强大、最受欢迎的网络抓取框架。目前,Scrapinghub为全球众多的大型电子商务公司每月抓取超过80亿的页面(其中30亿是产品页面)。



大规模抓取网页的要点


与标准的抓取网页应用程序不同,大规模抓取电子商务的产品数据将面临一系列独特的挑战,这使得网页抓取异常艰难。

从本质上来说,这些困难可以归结为两个方面:速度和数据质量。

通常时间是一个限制性约束,因此大规模抓取需要网络爬虫以非常高的速度抓取页面,并不会影响数据质量。这种对速度的要求造成大量抓取产品数据富有非常大的挑战性。


挑战1:杂乱且变幻无常的网页格式


杂乱且变化无常的网页格式可能是最常见的挑战,也可能不是最令人感兴趣的挑战,但它是迄今为止大规模提取数据时面临的最大挑战。这项挑战的关键不在于复杂性,而是需要花费大量时间和资源去处理。

如果你有过创建电子商务店铺爬虫经历的话,你就会知道电子商务店铺代码的杂乱无章是普遍现象。这不仅仅是HTML的格式或偶尔的字符编码问题。多年来,我们遇到了各种各样的问题,例如滥用HTTP响应代码、不完整的JavaScripts,或滥用Ajax:

  • 在产品销售终止后,店铺会删除页面,且在网站升级后404错误处理程序突然返回的响应状态为200;

  • 有些页面错误地转义JSON数据,导致页面上的Javascript遭到破坏,例如‘b0rk’d’等,所以必须使用正则表达式来删除这些数据;

  • 店铺大量滥用Ajax调用,所以只能等页面渲染完毕(这会导致爬虫速度更慢)或模仿API调用(这会导致额外的开发工作)才能想要的拿到信息。

如此杂乱的代码会让编写爬虫工作十分痛苦,且无法使用抓取工具或自动提取工具。

在大规模抓取网页时,你不仅需要浏览几百个像这样杂乱的网站,还要处理网站的不断更新。一个经验法则是:每2-3个月目标网站的变动就会废掉你的爬虫。

可能听起来不是什么大不了的事儿,但是当你大规模抓取时,这些意外会积累成灾。例如,Scrapinghub的一个大型电子商务项目大约有4000个爬虫,需要抓取1000个电子商务网站,这意味着每天他们都有20-30只爬虫遭遇失败。

来自区域和多语言网站布局的变动,A/B分割测试和包装/定价变动也会经常给爬虫带来问题。

没有捷径

很不幸的是,没有完全解决这些问题的灵丹妙药。很多时候,我们只能随着规模扩展投入更多资源。以上述项目为例,负责项目的团队共有18名爬虫工程师和3名专职QA,以确保客户始终拥有可靠的数据。

但是,凭借经验团队可以学会如何创建更强大的爬虫,以便检测和对付网站格式的各种怪招。

最佳做法不是为目标网站可能使用的所有布局逐一编写爬虫,而是仅凭一个产品提取的爬虫就可以处理不同页面布局所使用的所有可能规则和方案。爬虫拥有的配置越多越好。

虽然这些做法会让爬虫更加复杂(我们的一些爬虫长达几千行),但可以保证爬虫更加易于维护。

由于大多数公司需要每天都抽取产品数据,所以我们无法花费几天时间等待工程团队修改遭到破坏的爬虫。对于这种情况,Scrapinghub使用一种基于数据提取工具的机器学习,我们开发了这种机器学习模型作为后备,直到爬虫被修复。这种基于机器学习的提取工具可以自动识别目标网站的目标字段(产品名称、价格、货币、图像、SKU等等),并返回所需的结果。



挑战2:可扩展性架构



你将面临的下一个挑战是:构建一个爬虫基础架构,该架构可以随着每天请求数量的增加而扩展,而不会降低性能。

当大规模提取产品数据时,简单的网页爬虫只能连续地抓取数据,而不会节选。通常,一个连续的网页抓取会循环发送请求,一个接一个,每个请求需要2-3秒才能完成。

如果爬虫每天都请求量小于4万个的话(每2秒发送一个请求,意味着每天可以发送43,200个请求),这个方法还可以。但是,一旦请求数量超过这个数,你就需要切换到每天可以发送几百万请求且不会降低性能的爬虫架构。

正如上述讨论,速度是大规模抓取产品数据的关键。你需要确保在一定时间内(通常为一天)找到并抓取所有所需的产品页面。


本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程