【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池

最近开始着手总结以前做过的工作,写过的代码。

今天总结了以前写过的代理池维护模块,首先阐述一下个人理解的代理池:

代理池

代理池就是用于应付网站的反爬虫的备用代理ip集合。
做过爬虫都知道,在抓取某些网站的时候,如果你抓取的频率太高了,你的ip就会被该网站封掉或者说屏蔽掉,接下来你就会爬取失败,所以此时你就需要使用代理来解决这个问题。因此,一个庞大而有效的代理池是每个爬虫系统都应该具备的,它将为爬虫系统的正常运行提供保障。

前言(着急可略过此段)

想想以前做爬虫也有一年多的时间,虽说感觉当时的系统有很多地方需要完善甚至需要整个重构,但是由于时间原因,也只能将就着用了。现在由于我可能又需要再使用爬虫,因此我决定好好捋一捋此前的工作与思路,总结并思考优化方法。
此次我单独将代理池模块提取出来,总结成一个小框架,便于未来的扩展和使用。当然,初次总结肯定会存在一些不足的地方,以后再慢慢改进吧。

简介

我的这个代理池工具或者说小框架非常简单,不需要数据库,也不需要安装额外的库,使用php实现,只要你系统里有php的执行环境就行。爬取的目标是免费的代理网站,因为代理网站发布代理前都会验证,因此该框架没有验证代理有效性的模块(有需要的可以自己扩展),适用于中小型爬虫系统,代理池中的代理数量可以根据需要自己扩展。当然也可以直接使用免费代理api进行扩展,看各自需求吧。

运行流程

  1. 抓取目标代理网站源码;
  2. 根据配置好的正则表达式匹配需要抓取的内容;
  3. 整合抓取到的代理数据,以json格式存入文件中作为代理池。

使用教程

1. 配置需要抓取的目标代理网站和相应的正则表达式;

此处以某网站为例,如图,需配置网站的地址、抓取的页数,然后再配置需抓取内容的正则表达式:
【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第1张图片
下面举例解释一下如何分析出正则表达式:
【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第2张图片
如上图,可看到该代理网站的免费代理是一个表格,我们在网页上点击鼠标右键,选择“查看网页源代码”,然后就可以到下图的源码:
【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第3张图片
很明显的可以看出,整个表格的内容是由 标签包裹着的,每行代理数据是由 标签包裹着的,而每一列数据是由 包裹着的,于是可以写出如下正则表达式:
在这里插入图片描述
如果没学过正则表达式,建议先去看一下正则表达式的基本语法(很快就能学会)。
ip_regport_reg可以设置成一样,因为ip之后的下一列肯定是端口号port,再匹配完ip之后,将ip那一部分截取掉,再匹配端口号,这样就比较方便。而代理类型所在列是不固定的,所以我们不能使用与端口号一样的处理方式。
先分析源码,发现代理类型所在列都是在'代理IP'这个字符串之后的,所以可以将代理类型的匹配正则表达式写成
/IP<\/td>[ |\t|\r|\n]*(.*?)<\/td>/s

2. 运行程序

配置好之后就可以直接运行该代理池小工具了,直接运行 " operateProxyPool.php " 这个文件就行。

3.查看抓取到的代理数据

程序运行结束之后,文件夹下会生成一个“proxyPool.dat”文件,该文件就是代理池。
当然,作为代理池肯定需要持续更新的,所以你可以根据需要改进本工具的代码,让其一直运行,不断更新“proxyPool.dat”里的数据。

还有一点是如果需要提高更新效率,可以将改成多线程模式。个人认为当前的更新效率已经足够大多数人使用了。

附上抓取两个网站的例子:

每个网站都是一页15个代理,我们各抓两页,结果应该会抓取到60个代理数据
【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第4张图片【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第5张图片
配置如下:
【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第6张图片
抓取结果如下:

【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第7张图片
使用格式化工具格式化之后:
【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第8张图片
【爬虫】IP代理池的总结、实现与维护,IP代理池小工具(小框架),自建代理ip池_第9张图片
可以看到刚好60个,说明抓取代理数据成功,没有漏掉。

代码git地址,点击进入

如本文有任何纰漏和错误,恳请各位指正!

——————————————————————————————

最后,附上一个获取免费代理ip的API,备用:
https://raw.githubusercontent.com/fate0/proxylist/master/proxy.list

你可能感兴趣的:(php,爬虫)