--永恒的烦恼

搭建HTTP代理池

在做压力测试、爬取数据、安全等需要频繁的更换自己ip,目前网上有很多的优秀项目都开源,没一定的基础是搭建不起来,在这里个人仅仅做搭建教程。

项目一

项目源地址:https://github.com/jhao104/proxy_pool
该项目在开源上也是很有人气,个人也觉得很不错,可扩展性好。
这里有两种方式,一种是本地python环境运行,另外一种是Docker的方式运行,这里推荐新手使用Docker运行,Docker的安装下载官网:https://www.docker.com/get-started/ 。如果搭建过程有问题请参考该文章:Windows下安装Docker 。linux版本请自行网上参考。

docker方式搭建

为什么使用docker环境?是因为环境的搭建以及兼容性非常好,不同的服务以及程序,可以定义不同的端口以及很多很多方便,这里就不详细讲解了。
1.安装成功Docker并将它运行,在cmd环境下先安装jhao104镜像:

docker pull jhao104/proxy_pool

2.这里还需要redis环境,默认安装的是最新版本,如果需要别的版本请自己指定:

docker pull redis

3.启动redis环境,注意需要先启动docker,默认是没有启动的:

docker run -itd --name redis-proxy -p 999:6379 redis --requirepass "password"

以上参考关键部分: docker run -itd –name (启动容器的名称) -p 映射端口:redis启动端口 redis –requirepass “连接密码”
4.启动代理池环境:

docker run --env DB_CONN=redis://:password@127.0.0.1:999/0 -p 5010:5010 jhao104/proxy_pool:latest 

以上参考关键部分:docker run –env DB_CONN=redis://:(redis连接密码)@(IP地址):(服务的端口)/(redis的数据库,默认选0) -p 映射端口:代理池启动端口 jhao104/proxy_pool:latest
使用
启动web服务后, 默认配置下会开启 http://127.0.0.1:5010 的api接口服务:

api 方式 说明 参数
/ 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

爬虫使用:

import requests

def get_proxy():
    return requests.get("http://127.0.0.1:5010/get/").json()

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

def getHtml():
    retry_count = 5
    proxy = get_proxy().get("proxy")
    while retry_count > 0:
        try:
            html = requests.get('http://www.example.com', proxies={"http": "http://{}".format(proxy)})
            # 使用代理访问
            return html
        except Exception:
            retry_count -= 1
    # 删除代理池中代理
    delete_proxy(proxy)
    return None

注:基本按按开源教程的,个人仅简单介绍,详情请访问开源地址,以上的获取到的代理是通过公开的免费代理,但都有一个缺陷,那就是生存的时间很短,几分钟就过期。

项目二

基本使用两个代理池就够用了,可以在服务器上搭建自己的代理池,这样就可以方便自己的使用。这个是我之前在学习python时作者自己改别人的,源项目地址:https://github.com/Python3WebSpider/ProxyPool
这里使用docker比较简单,下载源项目并解压,cmd下进入解压的目录,执行以下命令:

docker-compose up

该命令会自己安装镜像并自启镜像,注意与其搭配的redis可能不会自启,还是需要自己手动启动,如图:

点击三角便可以启动成功。以下是使用案例:

import requests

proxypool_url = 'http://127.0.0.1:5555/random'
target_url = 'http://httpbin.org/get'

def get_random_proxy():
    """
    get random proxy from proxypool
    :return: proxy
    """
    return requests.get(proxypool_url).text.strip()

def crawl(url, proxy):
    """
    use proxy to crawl page
    :param url: page url
    :param proxy: proxy, such as 8.8.8.8:8888
    :return: html
    """
    proxies = {'http': 'http://' + proxy}
    return requests.get(url, proxies=proxies).text

def main():
    """
    main method, entry point
    :return: none
    """
    proxy = get_random_proxy()
    print('get random proxy', proxy)
    html = crawl(target_url, proxy)
    print(html)

if __name__ == '__main__':
    main()

这两个项目基本都是通用的,原理也是基本一致的,可以都搭建在自己的服务器上面,我们在使用时就可以调用了。两个项目的代码都会自己定时去爬取公开的代理,其实自己写一个也完全是可以的,如果有可能我也会自己写一个吧(估计没有时间)

赞(3) 打赏
转载请带上源站链接:玖伴一鹏 » 搭建HTTP代理池

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏