第三篇记录一下如何解决学习爬虫经常产生的IP的需求问题,时常苦苦搜寻,一个个复制粘贴测试是否可用甚是辛苦,突发奇想,尝试一劳多得,遂自己造个轮子,调用即可,岂不美哉,作为日常学习使用。
2020.5.26再次更新(添加了IPSearch_0使用方法)
项目已上传到GitHub:https://github.com/dataformydream/IPsearch
本文为IPSearch第一版本:IPSearch_0.py,可用来参考实现思路和学习总结。
申明:本文和相关代码只做学习用途,请合理合法使用。
目录
一、IP相关
暂只知道以下能获取到IP的途径:
1、付费:高匿,稳定(相对),调用接口省事,适合大规模爬虫,个人学习一般用不到。
2、免费:IP提供商收集的免费IP,当然大多不能用,需要自己筛选。
本篇暂选择了三个免费IP网站(国内)抓取IP,有些网站也提供了免费的调用接口,为练习爬虫还是直接爬取。
免费IP网站也有反爬措施和robot协议,建议遵守规则,详细阅读,控制访问频率,勿商用。
网站:西刺、西拉、高可用全球免费代理IP库
二、功能需求
为了方便使用,将以下功能封装在一个py文件中:
1、封装通用的requests库get方法为一个函数,返回get结果,主要实现随机选取user-agent,随机选取IP,若IP被识别则更换重新爬取,直到爬取成功,同时删去IP池中被封的IP,维持IP池可靠可用。
2、headers和proxies作为全局变量调用,headers可灵活添加xm-sign,referer,cookies等参数(即可变字典),IP池proxies为不重复列表
3、通过有限的IP或本机地址,抓取免费IP网站,对可用IP进行筛选,筛选条件可为类型(高匿透明等),IP类型(http、https)、响应速度、存活时间。筛选后存入IP池。(数据来源于IP网站)
4、能针对特定的网站对IP池进行筛选,维护IP池对爬虫网站访问的稳定高效,借此提高抓取效率,而不是网站用来检测是否可用的百度等首页。(能访问百度不一定能爬要爬的网站)
5、要获取的IP数可选(没有上限,数目不够自动遍历网站更多页面,甚至可爬光IP网站所有IP列表页面,不过时间极长,极不推荐,给网站服务器造成不必要的负担,甚至可能有法律风险,一般学习用爬虫10到20个IP足够了),并能在当前爬虫程序目录下生成json文件保存可用IP列表(只要能通过4中的筛选一般不会失效,生成后下次运行爬虫直接调用进IP池,会提前筛选一次,不够设定数目才会请求IP网站,大大减少重复获取IP时间)