当前位置: 首页 > 工具软件 > ProxyPool > 使用案例 >

ProxyPool 代理池拉取、扫描、过滤教程

易博文
2023-12-01

GitHub - Python3WebSpider/ProxyPool: An Efficient ProxyPool with Getter, Tester and Server

项目主要是做代理池采集入库到redis,我主要是通过搭建好的 /all 接口 获取到所有 ip ,通过一台高性能服务器来做代理池、拉取、验证、存储,项目的搭建教程请自行查看资料。

以下是我提供拉取、验证、存储的 shell 脚本包括了定时任务,如果需要修改任务请阅读一下代码

使用前需要先安装 nc

yum install nc -y

shell脚本的目录为 /home/ProxyPool , shell 名称为 FilterAgentPool.sh

定时任务创建时:

# 设置定时任务,每小时执行一次
(crontab -l ; echo "0 * * * * /bin/bash /home/ProxyPool/FilterAgentPool.sh") | crontab -

创建命令是:

mkdir -p /home/ProxyPool
cd /home/ProxyPool
touch FilterAgentPool.sh
#!/bin/bash


# 代理池源,默认从 "http://192.168.2.32:5555/all" 获取
proxy_pool_url="http://192.168.2.32:5555/all"

# 代理池文件路径,支持本地文件和网络文件,如果当前路径文件不存在则走网络路径
proxy_pool_file="/home/ProxyPool/proxy_pool.txt"

# 设置超时时间和线程数
timeout=3
threads=500

# 打印超时时间和线程数
echo "out time is $timeout"
echo "threads time is $threads"

# 检查代理池文件是否存在,不存在则从网络获取
if [[ -f "$proxy_pool_file" ]]; then
    echo "Using local proxy pool file: $proxy_pool_file"
    ips=$(cat "$proxy_pool_file")
else
    echo "Downloading proxy pool from: $proxy_pool_url"
# 获取网络路径的同时代码中有\n主要是解决代理池紧凑在一起的问题,如不需要则 改为
# ips=$(curl -s "$proxy_pool_url")
    ips=$(curl -s "$proxy_pool_url" | tr " " "\n")
fi


# 创建存储存活代理的文件
echo "" > http.txt

# 函数定义:测试代理是否存活并存储结果到对应的文件中
test_proxy () {
    local proxy=$1
    if nc -w $timeout -z -v ${proxy%:*} ${proxy#*:} &> /dev/null; then
        echo "$proxy" >> http.txt
    fi
}

# 并发测试代理
for ip in $ips; do
    ((i=i%threads)); ((i++==0)) && wait
    test_proxy "$ip" &
done

# 等待所有子进程结束
wait

# 删除空行
sed -i '/^$/d' http.txt

# 记录本次运行的时间和存活代理IP数量
timestamp=$(date +'%Y-%m-%d %H:%M:%S')
count=$(wc -l < http.txt)

# 打印日志
echo "[$timestamp] Successfully tested $count proxy IPs."

# 限制文件行数,只保留最近的5000个代理IP
tail -n 10000 http.txt > tmp.txt && mv tmp.txt http.txt

代码执行过程:

  1. 从指定URL获取代理IP列表
  2. 并发测试代理IP是否可用,存活的代理IP将被记录在http.txt文件中
  3. 删除http.txt中的空行,并记录本次运行时间和存活代理IP数量,将结果打印在终端中
  4. 限制http.txt文件行数,只保留最近的10000个代理IP
  5. 设置定时任务,每小时执行一次脚本

代码执行速度可能会受到网络状况和代理IP数量的影响。通过增加线程数可以提高测试速度,但也会增加系统负担,需要根据实际情况进行调整。另外,限制http.txt文件行数可以防止文件过大导致的性能问题。

 类似资料: