自动代理ip地址.bat
怎么测试IP是否能用?小编的思路是用这个IP去访问一个验证网址,然后看返回的网络状态码(这个之前的文章讲过),如果是200,说明访问成功,IP有效。如果访问出错或是返回的状态码不是200,说明IP不可用。这里要设定一个访问超时限制,根据自己需求而定,不然有些代理ip稳定性很差,访问一个网页需要5-10s,这样ip我们留着也没有意义。
这里需要说明以下,虽然西刺代理提供了API接口,但是要15分钟才会更新一次,对于想要快速抓取大量IP时并不好用。并且,由于这些免费IP有很多时效性很短,你必须快速抓取并且快速使用,不然很容易就失效了。所有西刺提供的这个API基本没用,很多时候还是需要爬取的,并没有起到减轻服务器压力的作用。
关于多进程及进程池的内容我在这就不多说了,后续单开一篇再记录一下。我就直接贴我整合后源码了,仅供参考:
以上程序是开了10进程,爬取了西刺代理网站中的高匿IP前50页。速度很快,大概5分钟所有就爬取完毕了。需要说一下,这里如果想开更多进程,需要注意一下自己的宽带带宽,开太多进程的话如果达到了你带宽限制,就会出现求情后返回空页面的情况,反而会影响爬虫的效率。
OK,这个函数的参数为yeshu,所以你可以输入选择爬第几页。当然,如果只爬一页的话,最好还是爬第一页,因为第一页的IP比较新,时效性及稳定性都较好。爬取第一页结果如下:
很轻松就得到了100个IP,这里需要说明一下:上边代码中pห้องสมุดไป่ตู้oxy是用format函数来设置的存贮格式,设置完的格式例如“HTTP#122.114.31.177:808”协议和地址端口用#分开存贮,我们后续用的时候只需split一下即可。
然而作为爬虫程序的设计者,为了避免IP被封锁,或者是想快速的爬取数据,就需要使用多个IP地址。目前网上有很多能提供可靠、稳定的IP代理服务,但是基本都是收费的,而且价格不菲。下面小编来讲一下自己是如何建立免费的代理IP池的。
爬取免费提供代理IP的网站,提取一定数量的IP,接着验证这些IP的可用性,然后保存这些IP供爬虫时使用。由于免费IP代理网站提供的IP可用性和稳定性都比较低,所以需要程序大量爬取才可以获得一些可用IP。
Python3.6.1,IDE是pycharm,系统是win10。主要使用到的库:requests、re。由于验证IP可用性时单进程效率较低,小编最后也使用了multiprocessing进程池Pool来提供程序的效率,开进程池不属于本文重点,所以不做过多介绍。
需要注意的是,这里的验证网址一定要选择一个不怕被爬,服务器强大稳定的网站。有这样的网站吗?当然有,而且是大厂,
哎,免费的始终是免费的,100个里也就几个ip能用,所以需要多爬一些,然后多验证一些。在调试时小编发现这个验证的速度是真的慢,所以利用进程池pool开了多进程,我这个是4核电脑,所以我开了10个进程。符合基本“核数*22”的原则。开了多进程后效率明显提高8-10倍左右。
西刺是非常的厚道、良心啊,很简单的源码,爬取也很简单。IP地址、端口、协议等信息都存在了标签为table、属性IP为ip_list的下面,并且一次性加载,不存在动态加载。而且api也不用抓取,显示在地址栏,只需替换页面。第一页的api:/nn/1,后续页面更换最后一个数字即可。小编由于很懒,非常非常的懒…所以就用正则re来匹配所有相应的内容了。也可以用xpath,beautifulsoup等方法很多,选择自己擅长顺手的即可。抓取及筛选并不复杂,小编就直接贴一下自己代码了。
需要说一下这里如果想开更多进程需要注意一下自己的宽带带宽开太多进程的话如果达到了你带宽限制就会出现求情后返回空页面的情况反而会影响爬虫的效率
众所周知,目前有很多网站的服务器数据并不想很轻易的被别人抓取,并且当你的爬虫程序过于“霸道”时,很容易将一些小厂的服务器卡死。针对这些,一般服务器都会设置一下反爬策略。其中比较有效的反爬策略的就是针对来访者的IP做相关阈值限制。比如说当一个IP访问速度过快,超过设定的阈值,那么网站就会认为这不是用户行为自动代理ip地址.bat,这是一个爬虫程序,然后就会封锁你的IP。轻则几个小时,重则永封。
通过这个方法,基本可以实现免费的个人代理ip池。由于这些免费的ip稳定性很差,所以建议在爬虫使用前再验证一遍,很容易实现,可以直接调用自己写过的测试函数。
还有就是,在爬取西刺代理时一定要注意速度。前段时间小编抽风开了50进程爬取…结果就是ip被封了。不,是在所有爬虫时都要适当降速。