ProxyScrape Python 和 Web:如何获取、验证和轮换代理
ProxyScrape 提供可下载的代理列表和 API,但免费列表并非生产级基础设施。以下是一个安全的 Python 工作流,用于获取、验证和轮换代理,以及在 Web 仪表板中应检查的内容。
ProxyScrape 经常与 Python 一起被搜索,因为用户想要在脚本中获取代理列表、测试并轮换它。Web 仪表板和 API 有重叠,但用途不同。本指南重点介绍一个安全的工作流:获取、验证、轮换,并了解何时免费代理是错误的工具。
从 ProxyScrape 获得什么:Web 列表、API 和付费池
ProxyScrape 提供代理列表下载和 API 访问,以及商业代理服务。确切的端点、协议、格式、限制和可用位置可能会变化,因此请始终在您的 ProxyScrape 仪表板或当前文档中确认。不要未经检查就硬编码您在旧教程中找到的端点。
免费代理列表最适合学习和测试。它们通常不适合生产环境抓取、登录或任何敏感数据,因为正常运行时间、速度和可信度差异很大。
在 Python 中获取代理列表
首先将 API URL 存储在环境变量中,而不是将其提交到代码中。
import os
import requests
API_URL = os.environ['PROXYSCRAPE_API_URL'] # copy from your ProxyScrape dashboard/docs
response = requests.get(API_URL, timeout=15)
response.raise_for_status()
lines = [line.strip() for line in response.text.splitlines() if line.strip()]
print(f'Fetched {len(lines)} proxies')
print(lines[:5])
如果 API 返回 JSON,请在选择字段之前检查响应结构。字段名称可能会变化。
data = response.json()
# Adjust this to match the current API response
proxies = [item['proxy'] for item in data.get('proxies', [])]
在代理浪费您的时间之前验证它们
代理列表在测试之前没有用。针对无害的 IP 回显端点进行验证,并记录哪些代理可用。
import concurrent.futures
import requests
TEST_URL = 'https://api.ipify.org?format=json'
def check(proxy):
# Use http:// for HTTP proxies.
# For SOCKS5, install requests[socks] and use socks5h://host:port.
proxy_url = f'http://{proxy}'
proxies = {'http': proxy_url, 'https': proxy_url}
try:
response = requests.get(TEST_URL, proxies=proxies, timeout=8)
response.raise_for_status()
return proxy, response.json()
except Exception:
return proxy, None
working = []
with concurrent.futures.ThreadPoolExecutor(max_workers=50) as pool:
for proxy, result in pool.map(check, lines[:200]):
if result:
working.append(proxy)
print('OK', proxy, result)
print(f'Working: {len(working)}')
对于 SOCKS5 代理,当您想要远程 DNS 时,请使用 socks5h://host:port。对于需要认证的代理,格式通常是 http://user:pass@host:port 或 socks5h://user:pass@host:port,但请确认提供商的格式。
在 Python 脚本中轮换代理
一旦您有了一个可用代理池,就用可预测的策略轮换它们。按请求轮换很简单,但它可能会破坏会话并触发登录检查。
import itertools
import requests
from requests.adapters import HTTPAdapter
working_proxies = working # from the validator above
proxy_cycle = itertools.cycle(working_proxies)
session = requests.Session()
session.mount('https://', HTTPAdapter(max_retries=2))
urls = [
'https://example.com/page/1',
'https://example.com/page/2',
'https://example.com/page/3',
]
for url in urls:
proxy = next(proxy_cycle)
proxies = {
'http': f'http://{proxy}',
'https': f'http://{proxy}',
}
try:
response = session.get(url, proxies=proxies, timeout=12)
print(response.status_code, proxy, url)
except requests.RequestException as exc:
print('FAILED', proxy, exc)
如果目标站点需要稳定的会话,请使用粘性会话,而不是每次都轮换。许多提供商通过用户名中的会话 ID 来实现这一点。请查看您的提供商文档以获取确切格式;不要猜测。
使用 ProxyScrape Web 仪表板
Web 端对于快速检查很有用:
- 下载您所需格式的列表。
- 如果可用,按协议筛选,例如 HTTP 或 SOCKS5。
- 如果可用,按国家或匿名级别筛选。
- 复制 API 端点以用于自动化。
- 检查列表是免费还是与付费计划绑定。
- 确认目标站点允许您计划的访问类型。
如果下载的列表在几分钟内就失效,这对免费代理来说是正常的。将其视为一次性资源。
道德、安全和法律检查
- 遵守目标站点的条款、robots.txt 和速率限制。
- 不要通过不受信任的免费代理发送凭据、个人数据或支付数据。
- 使用 TLS 并验证证书。
- 如果您处理个人数据,请检查 GDPR、CCPA 和其他适用规则。
- 当您需要可靠性和支持时,请使用付费住宅或数据中心代理。
要点
ProxyScrape 可以从 Web 仪表板和 Python 中使用,但工作流比来源更重要。获取当前列表、验证它、有目的地轮换,并将免费代理保留在它们应在的地方:测试和学习中。