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

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

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

获取结果

get_all参数获取全部IP


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

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

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

下载安装

  • 下载源码
git clone git@github.com:jhao104/proxy_pool.git

或者直接到https://github.com/jhao104/proxy_pool 下载zip文件,解压出来

安装依赖

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

下载redis数据库

windows下载地址:https://github.com/MicrosoftArchive/redis/releases
启动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地址为 http://127.0.0.1:5010


启动

# 如果你的依赖已经安全完成并且具备运行条件,可以直接在Run目录下运行main.py
# 到Run目录下:
>>>python main.py

# 如果运行成功你应该看到有4个main.py进程

# 你也可以分别运行他们,
# 依次到Api下启动ProxyApi.py,Schedule下启动ProxyRefreshSchedule.py和ProxyValidSchedule.py即可.


使用

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

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

附上Api:

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

demo

import requests

def get_proxy():
    #可以换成我的Api
    return requests.get("http://127.0.0.1:5010/get/").text

def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))

# your spider code

def getHtml():
    # ....
    retry_count = 5
    proxy = get_proxy()
    while retry_count > 0:
        try:
            html = requests.get('https://www.baidu.com', 
            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代理应该更稳定一些。

编辑于 2017-11-27