注册
登录
提问时间:2018/8/22 15:26:50    楼主:未知网友   阅读量:268

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

与标准的抓取网页应用程序不同,大规模抓取数据将面临一系列独特的挑战,这使得网页抓取异常艰难。从本质上来说,这些困难可以归结为两个方面:速度和数据质量。

一、杂乱且变幻无常的网页格式

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

杂乱的代码会让编写爬虫工作十分痛苦,且无法使用抓取工具或自动提取工具。在大规模抓取网页时,你不仅需要浏览几百个像这样杂乱的网站,还要处理网站的不断更新。一个经验法则是:每2-3个月目标网站的变动就会废掉你的爬虫。

二、可扩展性架构

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

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

三、维持吞吐量性能

在提取大量数据时,我们必须尽可能寻找可以将周期时间降到最小、并在现有硬件资源的基础上将爬虫性能提高到最大的方法。所有这些都必须减少每个请求的时间,哪怕是几毫秒。

为此,你的团队需要深入了解正在使用的网页抓取框架、代理管理和硬件,才能更好地调优,以获取最佳性能。你还需要关注爬虫效率。

四、反爬虫策略

对于大多数小型网站来说,他们的反机器人策略非常基本(禁止IP提出超额请求)。然而,对于亚马逊等大型电子商务网站说,他们会使用非常成熟的反机器人策略,例如Distil Networks、Incapsula或Akamai等,这会让提取数据变得更加困难。

请记住,对于大规模抓取产品数据的项目来说,最重要的要求是使用代理IP。在大规模抓取时,你需要一个相当大的代理列表,并且需要实现必要的IP轮换、请求限制、会话管理和黑名单逻辑,以防止代理被封杀。

五、数据质量

如果每天需要提取几百万个数据点,那么手工验证所有数据是否干净完整是不可能的。一个不小心脏数据或不完整的数据就会进入数据源,并破坏数据分析工作。

除了仔细的QA流程外,创建爬虫的设计阶段,通过互相审查和测试爬虫的代码可以确保以最可靠的方式提取所需的数据。作为数据提取项目的一部分,你需要计划和开发一个监控系统,来提醒你数据上出现的不一致和爬虫错误。