如何搭建自己的免费IP代理池

之前写的爬取拉钩网,在使用Ajax接口时,如果我们post的速度过快,会返回请求过于频繁的提示,并且会提示我们的IP地址。在爬虫的过程中暂时封IP太常见了,所以就想做个IP代理池,放在一直没启用的腾讯云服务器上,这里给出一个Web调用接口:服务器接口(配置不高,注意速度)

获取结果

get_all参数获取全部IP

看完效果开始搭建,项目来源于github---jhao104/proxy_pool

这个项目十分简单,源码也不多

项目兼容Python2.7和Python3.x,win10和Ubuntu测试通过

下载安装

下载源码git clone [email protected]:jhao104/proxy_pool.git 或者直接到 下载zip文件,解压出来

安装依赖

pip install -r requirements.txt # 这是github作者给出的安装方式 # 如果安装有问题,可以找到txt文件自己手动安装所需库

下载redis数据库

windows下载地址: 启动redis:运行redis-server.exe(不要关闭) 查看状态:redis-cli.exe Linux安装:sudo apt-get install redis-server 启动redis:运行redis-server 查看状态:redis-cli

附上redis的相关资料:Redis 命令 | 菜鸟教程

配置Config.ini:

# Config.ini 为项目配置文件 # 配置DB type = SSDB # 如果使用SSDB或redis数据库,均配置为SSDB host = localhost# db host, 不行就用127.0.0.1 port = 6379 # db port, redis默认是6379 name = proxy# 默认配置 # 配置 ProxyGetter freeProxyFirst= 1# 这里是启动的抓取函数,可在ProxyGetter/getFreeProxy.py 扩展 freeProxySecond = 1 .... # 配置 HOST (api服务) ip = 127.0.0.1 # 监听ip, 若要开启外网访问改为0.0.0.0 port = 5010# 监听端口 # 上面配置启动后,代理api地址为 :5010

启动

# 如果你的依赖已经安全完成并且具备运行条件,可以直接在Run目录下运行main.py # 到Run目录下: >>>python main.py # 如果运行成功你应该看到有4个main.py进程 # 你也可以分别运行他们, # 依次到Api下启动ProxyApi.py,Schedule下启动ProxyRefreshSchedule.py和ProxyValidSchedule.py即可.

使用

  启动过几分钟后就能看到抓取到的代理IP,你可以直接到数据库中查看,推荐一个SSDB可视化工具

  也可以通过api访问:5010 查看。

附上Api:

这是我跑了一晚上的结果。每隔一段时间会更新IP数量,拿到的IP很多。还可以加入自己的代理IP接口:扩展代理

demo

import requests def get_proxy(): #可以换成我的Api return requests.get(":5010/get/").text def delete_proxy(proxy): requests.get(":5010/delete/?proxy={}".format(proxy)) # your spider code def getHtml(): # .... retry_count = 5 proxy = get_proxy() while retry_count > 0: try: html = requests.get( proxies={"http": "http://{}".format(proxy),"https": "https://{}".format(proxy)}) # 使用代理访问 return html except Exception: retry_count -= 1 # 出错5次, 删除代理池中代理 delete_proxy(proxy) return None

总结

免费的IP代理池搭建很简单,但是质量也不高,简单测试了拉钩网虽然不会返回请求频繁的问题,但是免费代理IP的可用性不高,估计购买付费IP代理应该更稳定一些。