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

1) 测试安全间隔。

测试的目的就是得到网站允许的最大访问频率是多少,确定一个合理的访问时间间隔。方法是:先使用一个较大的间隔(例如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个月才能完成,太可怕了。

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

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

时间: 2024-08-26 05:14:38

采集时如何有效地防止被网站屏蔽IP的相关文章

在Nginx服务器上屏蔽IP

采集和防止采集是一个经久不息的话题,一方面都想搞别人的东西,另一方面不想自己的东西被别人搞走. 本文介绍如何利用nginx屏蔽ip来实现防止采集,当然也可以通过iptable来实现. 1.查找要屏蔽的ip awk '{print $1}' nginx.access.log |sort |uniq -c|sort -n nginx.access.log 为日志文件, 会到如下结果,前面是ip的访问次数,后面是ip,很明显我们需要把访问次数多的ip并且不是蜘蛛的ip屏蔽掉,本例当中我们屏蔽掉 165

用python做采集时相对路径转换成绝对路径

采集时,有时候需要采集图片,但某些网站的图片提供的相对地址,最好转换成绝对地址 在scrapy中有如下的解决策略 http://stackoverflow.com/questions/6499603/python-scrapy-convert-relative-paths-to-absolute-paths http://stackoverflow.com/questions/19970015/scrapy-item-loader-to-get-a-absolute-url-from-extra

采集爬虫中,解决网站限制IP的问题?

方法1. 之前由于公司项目需要,采集过google地图数据,还有一些大型网站数据. 经验如下: 1.IP必须需要,像@alswl 说的非常正确,ADSL.如果有条件,其实可以跟机房多申请外网IP. 2.在有外网IP的机器上,部署代理服务器. 3.你的程序,使用轮训替换代理服务器来访问想要采集的网站. 好处: 1.程序逻辑变化小,只需要代理功能. 2.根据对方网站屏蔽规则不同,你只需要添加更多的代理就行了. 3.就算具体IP被屏蔽了,你可以直接把代理服务器下线就OK,程序逻辑不需要变化. 方法2.

绕过CDN查找网站真实IP方法

查找网站 源IP方法: 如果遇到需要绕过CDN,查找网站真实IP地址时,可以采用如下方法: 假设主站服务和邮件服务在同一台服务器: 1.在网站用QQ邮箱注册账号: 2.收取注册验证邮件: 3.查看邮件-->显示邮件原文 从而发现源IP地址:具体见下图 网站避免被拿到真实服务器IP地址: 1.将邮件服务和主站服务分开部署: 2.采用第三方邮件提供商发送邮件,如sendClound: 类似方式(通过让服务器主动连接用户方式): 1.通过上传用户头像获取服务器IP地址: 2.通过上传附件: http:

Linux 使用 iptables屏蔽IP段

netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加.编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则.这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核中.在信息包过滤表中,规则被分组放在我们所谓的链(chain)中. [喝小酒的网摘]http://blog.hehehehehe.cn/a/7674.htm netfilter/iptables 的最大优点是它可以配置有状态的防火墙,这是 ipfwadm 和 ipc

绕过CDN查找网站真实IP方法收集

方法1很简单,使用各种多地 ping 的服务,查看对应 IP 地址是否唯一,如果不唯一多半是使用了CDN, 多地 Ping 网站有: http://ping.chinaz.com/ http://ping.aizhan.com/ http://ce.cloud.360.cn/ 复制代码 T00LS; O- Y- \+ W* c) T3 ]方法2使用 nslookup 进行检测,原理同上,如果返回域名解析对应多个 IP 地址多半是使用了 CDN.有 CDN 的示例: - 专注网络安全0 k# f,

获取网站的IP地址

获取网站的IP地址的方法有很多,最常用的便是使用CMD命令中的ping命令,ping命令也是最常用的网络命令 使用ping命令获取网站的Ip地址的格式:ping +  网站的域名 如获取百度的IP地址的方式: ping + www.baidu.com 测试效果: 打开CMD 输入 ping www.baidu.com后单击回车 通过Winscoket编程的方式也可以获取网站的IP地址 程序代码: #include <stdio.h> #include <stdlib.h> #inc

centos7 防火墙屏蔽IP

1.屏蔽指定IP:124.115.0.199 iptables -I INPUT -s 124.115.0.199 -j DROP 2.屏蔽IP段: iptables -I INPUT -s 61.37.80.0/24 -j DROP    //61.37.80开头iptables -I INPUT -s 124.115.0.0/16 -j DROP        //124.115开头iptables -I INPUT -s 124.0.0.0/8 -j DROP      //124开头 3

关于 Apache 屏蔽 IP 地址

Apache屏蔽IP地址有很多麻烦,需要支持.htaccess,没添加或取消一个IP地址都需要重启Apache服务: 而且在.htaccess中屏蔽IP地址,不是永久屏蔽就是永久接触,可控性很差: <Limit GET HEAD POST> order allow,deny deny from 110.85.104.152 deny from 110.85.113 deny from 110.85.113.0/24 deny from 110.87 deny from 110.87.0.0/1