insocks
Back to blog. Article language: BN EN ES FR HI ID PT RU UR VI ZH

在 Scrapy 中设置代理

Scrapy 中的代理通过受控端点路由请求,从而可靠地采集公开数据。安全的 Scrapy 代理设置有助于本地化、负载分配、监控和稳定爬取。在美国, 使用代理仅限于合法的公开数据工作流,并须遵守 robots.txt、网站条款和速率限制。

为什么 Scrapy 项目需要代理

当单一连接难以满足可靠的公开数据采集需求时,Scrapy 项目就需要代理。合理规划的 Scrapy 代理工作流可帮助团队减少连接失败、对比区域性页面并保持测试可量化。

✅ 合法场景:

  • 公开产品页面监控
  • 区域性内容的 QA 测试
  • 可用性和正常运行时间检查
  • 内部数据验证

哪种代理类型最适合 Scrapy

最佳代理类型取决于稳定性、会话时长、价格和地区。对于长期公开检查,Scrapy 轮换代理方案可将请求分散到已批准的路由上,而不会将自动化变成垃圾请求。

类型稳定性最佳用途
住宅代理本地公开页面
移动代理移动端网页检查
ISP 代理长会话场景
数据中心代理内部 QA

开始之前的准备工作

在设置之前,准备好 Scrapy 项目、路由详情、凭据和测试 URL。Scrapy 代理中间件方案还需要明确的归属、安全存储和日志记录。

✅ 检查清单:

  • Scrapy 项目
  • IP 和端口
  • 用户名和密码
  • 测试 URL
  • 速率限制
  • 错误日志

如何在 Scrapy 中逐步设置单个代理

使用单个路由是最简单的初步测试方式。在此设置中,Scrapy 代理访问通过请求元数据传递,并由内置中间件处理。

  • 步骤 1. 启用代理中间件。
  • 步骤 2. 将路由添加到请求 meta 中。
  • 步骤 3. 运行一个爬虫。
  • 步骤 4. 检查状态码。

class DemoSpider(scrapy.Spider):

name = "demo"

start_urls = ["https://example.com"]

def start_requests(self):

for url in self.start_urls:

yield scrapy.Request(

url,

meta={"proxy": "http://user:pass@host:port"}

)

在已批准的工作流中使用 httpproxymiddleware,并将密钥保存在代码之外。

如何添加代理身份验证

身份验证确认你的脚本有权使用该路由。对于付费端点,Scrapy 代理中间件应保护登录数据,并支持代理身份验证,同时不在代码仓库中暴露密码。

import base64

token = base64.b64encode(b"user:pass").decode()

headers = {"Proxy-Authorization": f"Basic {token}"}

yield scrapy.Request(

"https://example.com",

headers=headers,

meta={"proxy": "http://host:port"}

)

将凭据存储在环境变量中。人员变更后应轮换密码。

如何使用中间件轮换代理

轮换有助于将请求分散到已批准的端点上。谨慎的 Scrapy 轮换代理工作流会在请求之间切换路由,同时保持延迟、日志和限制清晰明了。

  • 步骤 1. 存储已批准的代理池。
  • 步骤 2. 为每个请求选择一个路由。
  • 步骤 3. 在中间件中附加路由。
  • 步骤 4. 记录路由 ID。

class ProxyMiddleware:

def __init__(self, routes):

self.routes = routes

@classmethod

def from_crawler(cls, crawler):

return cls(crawler.settings.getlist("PROXY_POOL"))

def process_request(self, request, spider):

request.meta["proxy"] = random.choice(self.routes)

轮换代理中间件不应替代速率控制或合规审查。

如何调整 DOWNLOAD_DELAY 和 AUTOTHROTTLE

延迟设置可保持爬取稳定。Scrapy 轮换代理设置仍应使用下载延迟和自动节流,以避免流量突然飙升。

DOWNLOAD_DELAY = 2

AUTOTHROTTLE_ENABLED = True

AUTOTHROTTLE_START_DELAY = 1

AUTOTHROTTLE_MAX_DELAY = 10

CONCURRENT_REQUESTS = 8

在更改设置之前,先跟踪响应时间。

如何处理重试和封禁

重试应从临时网络问题中恢复,而不是强制重复访问。Scrapy 代理设置应使用适度的重试限制、明确的暂停以及显示请求失败原因的日志。

💡 在测试正常错误率之后再设置 RETRY_TIMES。

✅ 建议做法:

  • 使用小批量请求
  • 遵守 robots.txt
  • 监控状态码

❌ 不建议做法:

  • 无限重试
  • 忽略 403 或 429 模式
  • 过载公开页面

如何验证代理在 Scrapy 中是否正常工作

验证确认请求在实际采集开始之前通过了预期的端点。经过测试的 Scrapy 代理中间件流程应显示 IP、地区、响应码和耗时。

检查项预期结果
IP 地址所选端点
地区规划区域
状态码正常响应
速度稳定耗时

Scrapy 代理常见错误及修复方法

大多数故障来自错误的凭据、失效的路由、端口问题或过快的设置。如果 Scrapy 代理测试失败,请一次只检查一个变量,而不是同时更改整个爬虫。

❌ 常见问题:

  • 连接被拒绝
  • 超时
  • 身份验证失败
  • 重试次数过多
错误原因修复方法
连接被拒绝主机地址错误重新复制路由
超时端点响应慢测试其他路由
身份验证失败登录信息错误刷新凭据
429请求过快增加延迟

道德爬取注意事项(美国)

Scrapy 可用于公开数据采集、QA 测试、监控和研究等合规用途。合法的 Scrapy 代理工作流应遵守 robots.txt、网站条款、公开数据边界和速率限制。

在美国使用时,需记录任务目的、数据来源、所有者和保留期限。代理应支持合规性,而非掩盖滥用行为。

为 Scrapy 选择可靠的代理

优秀的代理提供商应提供稳定的路由、明确的地区、技术支持和以美元计费的透明定价。对于高级项目,当提供商和连接器支持时,Scrapy SOCKS5 代理可能会很有用。

特性优势
稳定路由更少故障
明确地区更好的测试
技术支持更快的修复
透明定价预算控制

先为一个爬虫试用演示,验证后再购买代理,或注册获取完整访问权限。

关键要点

总结:代理帮助 Scrapy 通过受控路由运行合法的公开数据工作流。Scrapy 代理应与目标、速率限制和日志相匹配。轮换与延迟和监控结合效果最佳。身份验证凭据必须安全存储。

常见问题解答

如何在 Scrapy 中设置代理?

将路由添加到请求元数据中,并启用相应的中间件。

如何在 Scrapy 中轮换代理?

使用自定义中间件,为每个请求选择一个已批准的路由。

Scrapy 是否支持 SOCKS5 代理?

是的,在提供商和连接器支持的情况下可以使用。

如何在 Scrapy 中添加代理身份验证?

通过请求头、路由格式或环境变量安全地传递凭据。

如何在 Scrapy 爬取时避免被封禁?

遵守 robots.txt、网站条款、速率限制和数据边界。

2026-07-15