V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zhijieju
V2EX  ›  Python

GitHub: ProxyPool 爬虫代理 IP 池

  •  1
     
  •   zhijieju · 2020-07-10 14:32:14 +08:00 · 3210 次点击
    这是一个创建于 1632 天前的主题,其中的信息可能已经有所发展或是发生改变。

    hello,小伙伴们,大家好,今天给大家分享的开源项目是:proxy_pool,这个开源项目是抓取个大免费代理 IP 网站,感兴趣的爬虫可以尝试把代码clone下载然后尝试应用一下,加油!!!

    ______                        ______             _
    | ___ \_                      | ___ \           | |
    | |_/ / \__ __   __  _ __   _ | |_/ /___   ___  | |
    |  __/|  _// _ \ \ \/ /| | | ||  __// _ \ / _ \ | |
    | |   | | | (_) | >  < \ |_| || |  | (_) | (_) || |___
    \_|   |_|  \___/ /_/\_\ \__  |\_|   \___/ \___/ \_____\
                           __ / /
                          /___ /
    

    免费代理源


    目前实现的采集免费代理网站有(排名不分先后, 下面仅是对其发布的免费代理情况, 付费代理测评可以参考这里):

    如果还有其他好的免费代理网站, 可以在提交在issues, 下次更新时会考虑在项目中支持。

    运行项目


    下载代码:

    git clone [email protected]:jhao104/proxy_pool.git
    

    or

    https://github.com/jhao104/proxy_pool/releases 下载对应 zip 文件
    

    安装依赖:

    pip install -r requirements.txt
    

    更新配置:

    # setting.py 为项目配置文件
    
    # 配置 API 服务
    
    HOST = "0.0.0.0"               # IP
    PORT = 5000                    # 监听端口
    
    
    # 配置数据库
    
    DB_CONN = 'redis://@127.0.0.1:8888'
    
    
    # 配置 ProxyFetcher
    
    PROXY_FETCHER = [
        "freeProxy01",      # 这里是启用的代理抓取方法名,所有 fetch 方法位于 fetcher/proxyFetcher.py
        "freeProxy02",
        # ....
    ]
    

    启动项目:

    # 如果已经具备运行条件, 可用通过 proxyPool.py 启动。
    # 程序分为: schedule 调度程序 和 server Api 服务
    
    # 启动调度程序
    python proxyPool.py schedule
    
    # 启动 webApi 服务
    python proxyPool.py server
    

    Docker 运行

    docker pull jhao104/proxy_pool
    
    docker run --env DB_CONN=redis://:password@ip:port/db -p 5010:5010 jhao104/proxy_pool:2.1.0
    

    使用


    如果要在爬虫代码中使用的话, 可以将此 api 封装成函数直接使用,例如:

    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))
    
    # your spider code
    
    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
    

    扩展代理


    项目默认包含几个免费的代理获取源,但是免费的毕竟质量有限,所以如果直接运行可能拿到的代理质量不理想。所以,提供了代理获取的扩展方法。

    添加一个新的代理源方法如下: 1 、首先在 ProxyFetcher 类中添加自定义的获取代理的静态方法, 该方法需要以生成器(yield)形式返回 host:ip 格式的代理,例如:

    class ProxyFetcher(object):
        # ....
    
        # 自定义代理源获取方法
        @staticmethod
        def freeProxyCustom1():  # 命名不和已有重复即可
    
            # 通过某网站或者某接口或某数据库获取代理
            # 假设你已经拿到了一个代理列表
            proxies = ["x.x.x.x:3128", "x.x.x.x:80"]
            for proxy in proxies:
                yield proxy
            # 确保每个 proxy 都是 host:ip 正确的格式返回
    

    2 、添加好方法后,修改 setting.py 文件中的 PROXY_FETCHER 项:  在 PROXY_FETCHER 下添加自定义方法的名字:

    PROXY_FETCHER = [
        "freeProxy01",    
        "freeProxy02",
        # ....
        "freeProxyCustom1"  #  # 确保名字和你添加方法名字一致
    ]
    

    schedule 进程会每隔一段时间抓取一次代理,下次抓取时会自动识别调用你定义的方法。

    以上就是这个开源项目的详细介绍了,感兴趣的小伙伴可以尝试应用一下。

    开源地址: https://github.com/jhao104/proxy_pool

    今天的推荐不知道大家喜欢吗?如果你们喜欢话,请在文章底部留言或点赞,以表示对我的支持,你们的留言,点赞,转发关注是我持续更新的动力哦!

    关注公众号回复:"1024",免费领取一大波学习资源,先到先得哦!

    2 条回复    2020-07-17 22:18:55 +08:00
    Kvip
        1
    Kvip  
       2020-07-14 17:12:36 +08:00
    前阵子有体验过这项目,通过给的环境里面获取的代理基本上都是 http 的,鲜有 https 的,要 https 的代理还是得自己搭建环境
    zhijieju
        2
    zhijieju  
    OP
       2020-07-17 22:18:55 +08:00
    白嫖的有的用就可以了,不挑食,最好自己搭建
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2572 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:52 · PVG 18:52 · LAX 02:52 · JFK 05:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.