IP代理池

IP代理作为反反爬的一个有效途径,面对一些基础的反爬网站,学会使用IP代理非常有必要

目前我使用来着GitHub上一个开源项目抓取公开IP的项目构建IP池子,再次感谢开源博主,下面进行介绍

Clone项目

git clone git@github.com:jhao104/proxy_pool.git

确认安装Redis并开启服务

Redis是一个用于存储键值对的简单数据库,可以从GitHub下载,也可以上官网,安装完成后,运行redis-cli.exe,如显示127.0.0.1:6379>,说明安装成功,并在指定端口开启服务,进一步可以配置密码,具体教程

redis-cli.exe -h 127.0.0.1 -p 6379
config set requirepass 123456  # 设置密码为123456

进行项目配置

  • 配置redis数据库密码

    DB_CONN = 'redis://:pwd@127.0.0.1:8888/0'  # pwd改为自己的密码123456

启动IP抓取

python proxyPool.py schedule  # 运行后开始抓取IP并存入数据库

调用IP池

python proxyPool.py server  # 启动API服务接口,端口为http://127.0.0.1:5010

具体调用规则包括

apimethodDescriptionparams

/

GET

api介绍

None

/get

GET

随机获取一个代理

可选参数: ?type=https 过滤支持https的代理

/pop

GET

获取并删除一个代理

可选参数: ?type=https 过滤支持https的代理

/all

GET

获取所有代理

可选参数: ?type=https 过滤支持https的代理

/count

GET

查看代理数量

None

/delete

GET

删除代理

?proxy=host:ip

调用实例(记得先开启API服务)

# 从数据库调用IP
def get_proxy():
    return requests.get("http://127.0.0.1:5010/get/").json()


# 删除数据库中IP
def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))


# 使用代理IP发起请求
def getResponse(URL, header):
    retry_count = 5
    proxy = get_proxy().get("proxy")
    while retry_count > 0:
        try:
            response = requests.get(URL, headers=header, timeout=60, proxies={"http": "http://{}".format(proxy)})
            # 使用代理访问
            return response
        except Exception:
            retry_count -= 1
            # 删除代理池中代理
            delete_proxy(proxy)
            return None

最后更新于