目前遇到的比较难搞的反爬虫技术有两个:特别难识别的人机识别验证码–如极验的手势验证,另外就是ip大量的限制,如R网站两次访问就被强制跳转到验证码页面。现在留下部署手记
针对这个问题,采用爬虫届大招一样的ADSL动态部署起来,要是,要明白用ADSL就意味着是开始拼成本了。不再像是过去随意一台电脑就爱怎么爬怎么爬。
目录:
- ADSL动态IP服务器原理:
- 购买与租用
- 命令行自动更换ip
- 部署爬虫代码
- 分布式爬虫问题记录
1:ADSL动态IP服务器原理
ADSL动态IP服务器,并不是什么高大上的方式,也不是什么特别高端的服务器,相反,使用起来,我们一般是用配置非常低的那一类,因为这个时候重要的是数量而不是质量。
原理很简单,在家庭网络中宽带上网只要断开再拨号一次,链接成功就会更换一次外网ip。并且链接建立后网速比较稳定。这就是动态ip了,一般这个ip池很大,一个城市一般会有5W-30W的ip。基本属于用不完。
so,只要有一台接入了宽带的电脑,都可以叫做ADSL动态IP服务器。但是,你要明白这样以来时间将会有部分消耗在网络建立的时间上大约十秒。
例如我们现在要攻克的R项目。他的页面每两次访问就会被强制跳转到验证码页面,,so,为了跳过验证码就得每两次访问就换一次ip。而且,最严重的就是要是面对这样高限制ip的,那么就不能在一台机器上通过多开爬虫客户端从而实现单机器的分布式爬虫。效率低很多。
要想提高效率要么是ip限制次数比较高的。比如1000/ip这种,。要么就是多机器每机器单个爬虫的分布式了。
2:购买与租用
要知道具体内容可以搜关键词:动态ip服务器 或者 ADSL服务器 或者 淘宝
然后你就可以看到n多服务商,一般而言,你选购一个50-80元/一个月的就还算可以用了,一般会采用vnc的方式远程桌面链接,很少有用linux系统的,下文中有分布式winxp系统的配置指南。淘宝中一般有1快或者5-10块试用一天的可以搞来。
3:命令行自动更换ip
环境 winxp下。使用rasdial 你在cmd控制台中系统自带有,输入
1 2 3 4 5 6 |
'rasdial /?‘ 出现帮助 print os.popen('rasdial /DISCONNECT').read() time.sleep(3) print os.popen('rasdial "设定的宽带名称" 帐号 密码').read() print os.popen('rasdial').read() time.sleep(1) |
这个时候你需要在网上邻居中新建一个宽带链接,名字最好是英文,然后先手动在可视化界面验证一下是否可以上网。然后使用上诉代码,来用控制宽带网络一个循环会断开重链接,
有可能出现的问题是,手动建立的或者别的进程建立的链接,这个命令行无法断开,所以最好一台电脑之运行一个爬虫,并且断开连接之间最好有时间延时。
4:部署爬虫代码
在winxp的环境下使用python一般是32位的,分布式自然会需要python-mysql模块,以及redis模块。下面提供安装包和安装方式。
python2_jb51 解压后安装msi和exe都可以
redis-2.1.5-win32 提供redis的功能模块
redis-py-master 解压后,由控制台移动到目录下,运行 python setup.py (提前配一下python环境变量)
MySQL-python-1.2.3.win32-py2.7 解压直接安装
项目运行截图:
5:分布式爬虫问题记录
目前出现的问题是:
1:mysql链接出现莫名中断问题,这个因为ip地址跟换太频繁,so,简单的用try来跳过错误,重新加入任务队列,然后重新跑,不让整个爬虫中断了就可以,
2:redis出现莫名链接中断问题。同上。
3:跟换ip太快导致ip并没有更换而是用原来的ip。延时久一点,设置为5s间隔为佳,网速链接不好宁愿爬虫请求之间的延时短点。也要让宽带断开与新连接时间长点。。