众所周知,目前有很多网站的服务器数据并不想很轻易的被别人抓取,并且当你的爬虫程序过于“霸道”时,很容易将一些小厂的服务器卡死。针对这些,一般服务器都会设置一下反爬策略。其中比较有效的反爬策略的就是针对来访者的IP做相关阈值限制。比如说当一个IP访问速度过快,超过设定的阈值,那么网站就会认为这不是用户行为,这是一个爬虫程序,然后就会封锁你的IP。轻则几个小时,重则永封。
然而作为爬虫程序的设计者,为了避免IP被封锁,或者是想快速的爬取数据,就需要使用多个IP地址。目前网上有很多能提供可靠、稳定的IP代理服务,但是基本都是收费的,而且价格不菲。下面小编来讲一下自己是如何建立免费的代理IP池的。
一、设计思路
爬取免费提供代理IP的网站,提取一定数量的IP,接着验证这些IP的可用性,然后保存这些IP供爬虫时使用。由于免费IP代理网站提供的IP可用性和稳定性都比较低,所以需要程序大量爬取才可以获得一些可用IP。
二、开发环境
Python3.6.1,IDE是pycharm,系统是win10。主要使用到的库:requests、re。由于验证IP可用性时单进程效率较低,小编最后也使用了multiprocessing进程池Pool来提供程序的效率,开进程池不属于本文重点,所以不做过多介绍。
三、设计过程
1、爬取“西刺代理”
这里需要说明以下,虽然西刺代理提供了API接口,但是要15分钟才会更新一次,对于想要快速抓取大量IP时并不好用。并且,由于这些免费IP有很多时效性很短,你必须快速抓取并且快速使用,不然很容易就失效了。所有西刺提供的这个API基本没用,很多时候还是需要爬取的,并没有起到减轻服务器压力的作用。
打开西刺代理的免费“高匿”服务选项,观察网页源码。如下图:
西刺是非常的厚道、良心啊,很简单的源码,爬取也很简单。IP地址、端口、协议等信息都存在了标签为table、属性IP为ip_list的下面,并且一次性加载,不存在动态加载。而且api也不用抓取,显示在地址栏,只需替换页面。第