Skip to main content
这份教程用一个获授权的公开页面完成代理配置、请求、解析和文件导出。先用 example.com 验证流程,再替换为获准的目标和运营联系地址,并遵守目标公布的请求限制。

选择代理与会话

代理解决网络出口选择。你仍需控制请求速率、检查选择器并验证记录;HTTP 200 不能证明采集字段完整。

使用 Requests 完成采集与导出

1

创建 Python 环境

在新的工作目录运行以下命令。SOCKS 代理需要 requests[socks] 中的可选依赖。
macOS 或 Linux 的激活命令为 . .venv/bin/activate。下载 web_scraping.py 和 retry_after.py,将两个文件放在同一目录。
2

设置目标和代理连接信息

以下都是占位值。将完整代理 URL 注入 SCRAPING_PROXY_URL,协议、主机、端口和认证信息必须与所提取的代理匹配。HTTP 代理使用 http://,SOCKS5 代理可使用 socks5h://。URL 中用户名或密码的特殊字符需要百分号编码。
正式任务通过密钥管理工具注入真实凭据。不要把真实值写入共享脚本或打印到日志。修改目标时同步修改 ALLOWED_HOSTS;示例只允许白名单中的 HTTPS 主机和默认端口。将脚本中的 contact@example.com 替换为运营联系地址。
3

保存完整脚本

主程序复用一个 requests.Session,同时为 HTTP 与 HTTPS 请求设置代理,读取首个 title 和 h1,检查非空后导出 JSON 与 CSV。它关闭自动重定向,避免未经检查地切换目标。
4

运行并检查结果

成功运行后,打开 output/results.json 和 output/results.csv,核对 url、title、h1 的值、编码与记录数量。控制台的 outcome=success 来自本次运行,不是预置的验证结果。根据实际字段规则处理重复记录后,再将数据送到后续系统。

使用 Scrapy

这个单文件 Spider 通过真实请求的 meta["proxy"] 配置代理,并用下载器中间件覆盖机器人规则等附加请求。此路径使用 Scrapy 的 HttpProxyMiddleware,请提供 HTTP 或 HTTPS 代理 URL。将 scrapy_example.py 与 retry_after.py 放在同一目录,沿用上述环境变量。
scrapy_example.py
Spider 使用异步 start(),启用机器人规则、AutoThrottle 和每个域名的并发限制。中间件对所有响应检查认证失败、429 和列出的暂时性服务错误,覆盖 robots.txt 等附加请求。遇到限流或暂时性错误时输出 UTC retry_at,设置停止标记并安排关闭爬虫;后续请求会被拒绝,留给外部调度器恢复。它关闭自动重试和重定向,避免其他组件提前重发请求。框架原始日志被关闭,控制台只输出预先定义的错误类别和实际导出结果。

控制重试与故障处理

Requests 示例每个 URL 最多尝试 3 次,连接和读取超时分别为 10 秒、30 秒,任务累计重试等待预算为 60 秒。预算限制本次进程愿意等待的时间,不会把有效的 Retry-After 截短为 60 秒。响应头可使用秒数或 HTTP 日期。超过剩余等待预算,或最后一次尝试仍遇到暂时性错误时,脚本输出 outcome=deferred、UTC retry_at 和原因,并以退出码 2 结束。只在响应头缺失或无效时使用有限指数退避。调度器必须在 retry_at 或之后恢复任务,示例本身不创建调度。

接入任务队列前验证

先运行一个获授权的请求,另外核对实际出口地区。检查两个输出文件的字段、编码和重复记录处理。用受控响应测试 407、429、HTTP 日期和超时路径,核对延后任务没有提前重试。 生产任务还应明确队列、目标规则、限速、会话所有权、记录校验与解析失败隔离。日志保留时间、状态类别和耗时,避免保存代理凭据。只在有效记录率、目标响应和成本都满足任务约束后提高并发。 代理配置参考 Requests 官方文档 和 Scrapy HttpProxyMiddleware。重试时间格式见 RFC 9110:Retry-After。