手把手教你搭建免费代理 IP 池:基于 proxy_pool 项目

一、环境准备

在开始搭建之前,我们需要确保本地环境已经安装了以下工具和软件:

  1. Python 3.9.2:你可以从 Python 官方网站 下载并安装 Python 3.9.2 版本。
  2. Redis:Redis 是一个开源的内存数据结构存储系统,用于存储代理 IP 信息。你可以从 Redis 官方网站 下载并安装 Redis。
  3. Git:用于从 GitHub 克隆 proxy_pool 项目。你可以从 Git 官方网站 下载并安装 Git。

注意:python环境可以选择其它版本,具体参考GitHub项目文档,经测试,3.9.2环境是可以运行的 

二、克隆项目

打开终端或命令提示符,执行以下命令从 GitHub 克隆 proxy_pool 项目:

bash

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

克隆完成后,进入项目目录:

bash

cd proxy_pool

三、安装依赖

在项目目录下,使用 pip 安装项目所需的依赖库:

bash

pip install -r requirements.txt

这个过程可能需要一些时间,请耐心等待。

四、更新配置

项目的配置文件 setting.py 位于项目的主目录下。打开该文件,根据实际情况修改配置信息:

# 配置 API 服务
HOST = "0.0.0.0"  # IP
PORT = 5000  # 监听端口

# 配置数据库
DB_CONN = 'redis://@127.0.0.1:6379/0'  # 请根据实际的 Redis 配置修改

# 配置 ProxyFetcher
PROXY_FETCHER = [
    "freeProxy01",  # 这里是启用的代理抓取方法,所有 fetch 方法位于 fetcher/proxyFetcher.py
    "freeProxy02",
    # ....
]

五、启动 Redis 服务

在终端中启动 Redis 服务:

bash

redis-server

确保 Redis 服务正常运行后,我们可以继续启动代理 IP 池项目。

六、启动项目

proxy_pool 项目包含两部分:schedule 调度程序和 server API 服务。调度程序负责采集和验证代理,API 服务提供代理服务的 HTTP 接口。

启动调度程序

在终端中执行以下命令启动调度程序:

bash

python proxyPool.py schedule

调度程序会定时从各个免费代理源采集代理 IP,并进行验证,将可用的代理 IP 存入 Redis 数据库。

启动 API 服务

在另一个终端中执行以下命令启动 API 服务:

bash

python proxyPool.py server

API 服务启动后,你可以通过访问 http://127.0.0.1:5000 来查看 API 介绍。

七、使用代理 IP 池

启动 ProxyPool 的 server 后,会提供以下几个 HTTP 接口:

ApiMethodDescriptionArg
/GETAPI 介绍
/getGET随机返回一个代理
/get_allGET返回所有代理
/get_statusGET返回代理数量
/deleteGET删除指定代理proxy=host:ip

更多配置请参考项目文档 /user/how_to_config

以下是一个使用 Python 代码调用 API 获取代理的示例:

import requests

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

def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5000/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

八、扩展代理源

项目默认包含几个免费的代理获取源,但质量可能有限。你可以通过以下步骤扩展代理源:

  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 = [
    "freeProxy01",
    "freeProxy02",
    # ....
    "freeProxyCustom1"  # 确保名字和你添加方法名字一致
]

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

九、总结

通过以上步骤,我们成功搭建了一个免费的代理 IP 池。这个代理 IP 池可以帮助我们在爬虫项目中更稳定地访问目标网站,提高爬虫的效率和成功率。同时,我们还可以通过扩展代理源来增加代理 IP 的质量和数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值