前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >二百元成本单网站每天爬取百万量级数据的方法

二百元成本单网站每天爬取百万量级数据的方法

作者头像
普通程序员
发布2019-10-23 11:33:34
9600
发布2019-10-23 11:33:34
举报

在网络爬虫抓取信息的过程中,如果抓取频率高过了网站设置的阀值,会被禁止访问。通常,网站的反爬虫机制依据IP来标识爬虫。

开发者可以采取以下手段来解决这个问题:

1、放慢抓取速度,减小对于目标网站造成的压力。这样会减少单位时间类的抓取量。

2、通过设置代理IP等手段,突破反爬虫机制继续高频率抓取。但是这样需要大量稳定的代理IP。

3、通过ADSL交替拨号,诈骗运营商IP

(https://www.zhihu.com/question/26018679)。

之前有一段爬虫研发的经验,当时要爬取上百个竞品网站,有些网站每天需要爬取的数据量以百万计,必须要有一套既高效又不(经常)被封IP的方案。我当时采用通过策略,设置代理IP的手段。

基本思路是将得到的代理IP用于爬取数据,抛弃不能爬取数据的IP,提高爬取速度快的IP的使用率,控制IP的使用率防止被屏蔽,在这三个策略的作用下,让代理IP资源在代理IP池中持续更新。整个结构如下图所示(这个模块起名叫“代理IP管理模块”)。

一、代理IP获取

贩卖中了木马的服务器IP已经形成一条地下产业链,在淘宝或者一些QQ群中能够找到提供这种代理IP的商家(他们通过扫描IP段的特定端口发现这些中了木马的服务器(肉鸡))。一般100多元就能包月(使用成本非常的低),几乎可以无限次从商家(API接口)那里获得实时更新的代理IP。但是这些IP质量参差不齐,有的能用,有的不能用,有的速度慢,有的只有某些时段能使用。

将这些IP用于爬取百度首页进行初步筛选,能用的留下,放入代理IP池队尾(参看二、代理IP池章节)。

二、代理IP池

1、为每一个需要被爬取的网站设置一个独立的代理IP池,同一个IP爬不同的网站表现(有的能爬,有的不能爬,有的快,有的慢)不同。

2、一个IP池结构如下图,环形队列。借代理时从对头将代理IP数据取出,提供给抓取节点爬取网站数据。

3、如果这个代理IP能够爬取该网站数据,爬取成功后,抓取节点归还此代理IP(报告代理IP抓取成功)。程序将这个代理IP写入环形队列队尾。

三、借代理

接待里功能有一个限速功能,同一个代理IP,借出的频率需要控制,否则有可能被网站屏蔽。限速的方法可参看guava的RateLimiter工具。如果从代理IP池拿到的代理IP超过频率上线了,丢弃这个IP,再从代理IP池中获取下一个IP。知道拿到满足限速要求的IP。(丢弃IP不会导致可用代理IP大量减少,因为“代理IP获取功能” 和“代理再投放” 功能会不断的往代理IP池里补充可用代理IP)。

四、还代理

抓取节点使用代理IP爬取网页会有一下结果,成功、超时、连接失败、被屏蔽。抓取节点会将结果反馈给“代理IP管理模块”。对于成功抓取网页的代理IP,直接放入“代理IP池”;对于超时或连接失败的IP,抛弃处理;对于抓取耗时很少的IP(优质IP),放入“代理再投放模块”;对于被屏蔽的,通知“借代理”功能调低借出频率。

五、代理再投放

对于优质代理IP,需要防止因为某次抓取失败就丢失的风险,同时需要适当提高它用于爬取数据的频次。“代理再投放”功能,会在一段时间延迟之后,将这个优质IP再次放入“代理IP池”,投放次数随时间衰减。这样“代理IP池”中就会出现两个相同IP(IP1),IP1用于爬取的频次就变多了。由于IP1爬取成功率高,它会被不断的再投放,占据IP池更多的空间。当然“借代理”功能由限速,IP1不会占满“代理IP池”。

在这几个策略的共同作用下,“代理IP池”中的IP会保持动态平衡,既不被网站屏蔽,又有很高的效率。

上图是某个IP对网站爬取量的时间图。线条1,IP借取次数;线条2,抓取成功量;线条3,IP再投放次数;线条4,被屏蔽次数。

蓝线表示借代理的量,红线表示用这个代理能够正常完成下载的量,我们能看到蓝线、红线大多数时间保持一致,表明下载成功率较高。

图中上午11点左右,成功率有所下降,此时抓取模块既报告IP可用,也大量报告IP不可用(借的量多,还的量少)。 此时候“代理在投放”功能马上进行干预,将该IP重新放入“代理IP池”,避免该IP因短时间不好用导致被淘汰。

整个抓取过程中,被屏蔽的情况很少。

OK,一个月200块钱的代理IP费,搞定单网站每天百万量级数据爬取需求。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 普通程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档