采集时如何有效地防止被网站屏蔽IP

1) 测试安全间隔。web

        测试的目的就是获得网站容许的最大访问频率是多少,肯定一个合理的访问时间间隔。方法是:先使用一个较大的间隔(例如30秒)去访问网站(能够本身写程序实现,也能够借助相似iMacros的浏览器自动化插件),若是不会被屏蔽就减小间隔时间,重复上述步骤直到IP被屏蔽。假设间隔3秒正常,间隔2秒时被屏蔽了,咱们就能大概估计出网站容许的最大访问频率限制为“1次/3秒”。浏览器

2) 制定控制策略。安全

        若是咱们使用“1次/大于3秒”的频率去访问网站就是安全的(固然这个频率越小越安全),根据咱们的经验,大多网站使用“大于3秒”的时间间隔访问是不会触发网站的屏蔽策略(咱们的建议间隔值:5秒)。多线程

        在程序中的实现方法:对于同一个IP,在下载页面以前判断与上次访问间隔的时间是否超过5秒了,若是没有就sleep,直到超过5秒才能发出下一个请求。测试

3) 用多线程+HTTP代理提速。网站

        若是咱们采用5秒的时间间隔意味着每分钟咱们只能完成12次的访问(HTTP请求),一天也仅仅能完成不到2万次的下载(3600 * 24  / 5 = 17280)。这个速度对于小规模的网站还能接受,但对于拥有上百万甚至千万页面的网站来讲,这个速度实在是太慢了。以大众点评网为例,1500万页,照这个速度须要2年零4个月才能完成,太可怕了。spa

        而咱们采集一次大众点评网仅须要15天左右,咱们是怎么作到的呢? 就是经过多线程+ HTTP代理。用过HTTP代理的虫师都知道当咱们经过高匿名HTTP代理发出一个请求,目标网站只能检测到HTTP代理的IP,而没法检测到源IP,也没法知道你在使用代理,对目标网站来讲这个请求是来自于另一个访客(与你无关)。假设咱们拥有100个稳定高匿的HTTP代理,仍然在同IP间隔5秒的前提下,理论上天天能达到的下载量是170万!插件

        在程序中的实现方法:开启100个线程,每一个线程固定地使用一个HTTP代理,每一个线程处理不一样的采集任务,每一个线程内控制访问网站的速度。因为数据提取是纯计算操做多线程并不能加速,12核CPU环境下,实际天天的采集量能达到100万左右(每一个页面提取20个字段左右)。线程

相关文章
相关标签/搜索