列表层面的轮换
ProxySale 通过列表本身轮换代理。代理池全天都在剔除失效地址、加入新地址,软件每次请求列表链接,拿到的就是那一刻可用的集合。您不需要在我们这边设置轮换规则:每 8 到 10 分钟重新加载链接,列表就始终是最新的。
接下来由软件为每个请求挑选一行。多数采集器和 SEO 工具每发一个请求就随机取一个代理,出错时再换下一个,负载就分散到成千上万个地址上。
轮换代理为什么对采集器有帮助
搜索引擎、电商平台和比价网站会按 IP 统计请求。一个地址每分钟发几百个请求,就会撞上验证码或封锁。把同样的负载分散到轮换代理列表上,每个地址只发几个请求,目标看到的就接近普通访客。
轮换还能掩盖失效行。失败的请求会换一个地址重新发出,下一次重新加载列表时,坏掉的行就被剔除了。
在软件中设置轮换
- A-Parser 和 ZennoPoster:把列表链接添加为代理来源,每 10 分钟重新加载。
- Scrapy:把列表加载到一个 downloader middleware 中,每个请求随机选一行。
- Python requests:把列表放在内存里,在 proxies 字典中传入随机一行。
- bash 中的 curl:每次调用前用
shuf -n 1取一行。
重新加载保持 8 到 10 分钟即可。每分钟一次的请求会被我们限速,代理池本来也变不了那么快。
轮换策略
- 每个请求随机一行:最简单的方案,负载最均匀。
- 一小串请求用同一行:适合网站期待几个相关请求的情况,比如搜索页和下一页结果。
- 出错就换:一行能用就一直用,遇到验证码、超时或 403 就丢弃。
- 冷却期:被封锁后,让该地址退出轮换 10 到 15 分钟。
多数采集器会把第一种和第三种结合起来:每个请求随机一行,出错立即更换。留意验证码和失败请求的比例。比例上升时,就增加地址或放慢速度。
您需要多少地址
统计发往最难目标的每分钟请求数,再除以单个地址能安全发送的数量。如果网站能容忍单个 IP 每分钟五个请求,而您需要 5,000 个,就至少准备 1,000 个可用地址,再为夜间的下降留出余量。更大的任务请看批量代理页面。
按目标选代理池:全球网站用 World MIX,欧盟网店和搜索用欧洲代理,Yandex 和区域电商平台用独联体代理,百度用中国代理。
需要固定地址的任务
有些工作需要长时间使用同一个地址:登录账号、保持购物车、运行指纹浏览器配置文件。轮换的套餐列表不太适合,因为地址可能离开代理池。这类工作请选 Max 代理池的住宅代理:家庭设备在线时,每条代理行都有自己的会话,时长 三分钟到一天。指纹浏览器代理页面介绍了配置文件的设置方法。
凡是读取公开页面的任务,轮换都更合适,每个请求的成本也更低。
每 10 分钟更新一次的列表文件
有些工具只能从文件读取代理。用一个每 10 分钟下载一次列表的小脚本,让这个文件保持新鲜。下面每个脚本都先写入临时文件,下载完整后才替换主文件,所以软件永远不会读到写了一半或空的列表。把 YOUR_LIST_LINK 换成控制面板里的列表链接。
Linux:shell 脚本加 cron
把脚本保存为 /opt/proxies/update-proxies.sh,用 chmod +x /opt/proxies/update-proxies.sh 赋予执行权限,然后手动运行一次。它会输出保存了多少个代理,链接无响应时则输出错误。
#!/bin/sh
LIST_URL="YOUR_LIST_LINK"
DEST="/opt/proxies/proxies.txt"
TMP="$DEST.tmp"
mkdir -p "$(dirname "$DEST")"
if curl -fsS --max-time 60 -o "$TMP" "$LIST_URL" && [ -s "$TMP" ]; then
mv "$TMP" "$DEST"
echo "$(date '+%F %T') saved $(wc -l < "$DEST") proxies"
else
rm -f "$TMP"
echo "$(date '+%F %T') download failed, kept the old list" >&2
exit 1
fi用 crontab -e 打开定时任务,加入下面这一行。cron 会每 10 分钟启动一次脚本,并把输出追加到日志。以 root 身份运行,或者把两个路径都改成您主目录下的文件夹。
*/10 * * * * /opt/proxies/update-proxies.sh >> /var/log/update-proxies.log 2>&1Windows:PowerShell 加任务计划程序
把脚本保存为 C:\proxies\update-proxies.ps1,在 PowerShell 中运行一次,检查链接是否可用。
$ListUrl = "YOUR_LIST_LINK"
$Dest = "C:\proxies\proxies.txt"
$Tmp = "$Dest.tmp"
New-Item -ItemType Directory -Force -Path (Split-Path $Dest) | Out-Null
try {
Invoke-WebRequest -Uri $ListUrl -OutFile $Tmp -UseBasicParsing -TimeoutSec 60
if ((Get-Item $Tmp).Length -eq 0) { throw "empty list" }
Move-Item -Force $Tmp $Dest
$count = (Get-Content $Dest | Measure-Object -Line).Lines
Write-Output "$(Get-Date -Format s) saved $count proxies"
} catch {
Remove-Item $Tmp -ErrorAction SilentlyContinue
Write-Output "$(Get-Date -Format s) download failed, kept the old list: $($_.Exception.Message)"
exit 1
}注册一个每 10 分钟运行脚本的任务:把命令粘贴到命令提示符或 PowerShell 中。任务在重启后依然有效,在任务计划程序中显示为 UpdateProxies。它在您登录期间运行;若要在没有登录会话时运行,请以管理员身份打开命令提示符,并在命令后加上 /RU SYSTEM。
schtasks /Create /TN "UpdateProxies" /SC MINUTE /MO 10 /F /TR "powershell.exe -NoProfile -ExecutionPolicy Bypass -File C:\proxies\update-proxies.ps1"更习惯用鼠标?启动“任务计划程序”,点“创建基本任务”,触发器选每日,然后打开任务属性,设置“重复任务间隔 10 分钟,持续时间无限期”。操作为启动 powershell.exe,参数是 -NoProfile -ExecutionPolicy Bypass -File C:\proxies\update-proxies.ps1。
任意系统:Python
Python 版本循环运行,不需要定时器。在终端、screen 或 tmux 中启动,或作为服务运行。需要 Python 3,不需要额外的包。
import time
import urllib.request
from pathlib import Path
LIST_URL = "YOUR_LIST_LINK"
DEST = Path("proxies.txt")
EVERY = 600
while True:
try:
data = urllib.request.urlopen(LIST_URL, timeout=60).read()
if not data.strip():
raise ValueError("empty list")
tmp = DEST.with_name(DEST.name + ".tmp")
tmp.write_bytes(data)
tmp.replace(DEST)
print(time.strftime("%Y-%m-%dT%H:%M:%S"), "saved", len(data.split()), "proxies", flush=True)
except Exception as error:
print(time.strftime("%Y-%m-%dT%H:%M:%S"), "download failed, kept the old list:", error, flush=True)
time.sleep(EVERY)让软件指向保存的文件,它读到的列表就始终不超过 10 分钟。请保持 10 分钟的间隔:更频繁的请求会被限速。
协议、价格与测试
每条轮换套餐代理行都在一个端口上支持 HTTP、HTTPS、SOCKS4 和 SOCKS5,见 SOCKS5 代理和 HTTP 代理。规模和时长见价格表,在联系页面可申请任一套餐 1 小时免费试用。
