You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Python Requests与Scrapy请求结果不同?如何解决Scrapy 301问题?

Scrapy爬取返回301但Requests正常的问题分析与解决

一、请求差异分析

两者请求的核心差异在于请求头内容,具体表现为两点:

  • User-Agent(UA)标识:Scrapy默认使用带有Scrapy字样的UA(如Scrapy/2.8.0 (+https://scrapy.org)),而Requests默认使用带有python-requests字样的UA。Depop服务器可能针对Scrapy这类爬虫UA做了拦截,返回301重定向。
  • 请求头完整性:Requests会自动填充Accept-Encoding、Accept等常用浏览器请求头,而Scrapy的默认请求头更精简,服务器可能因此判定为非合法浏览器请求,触发重定向。

二、解决方法

1. 替换User-Agent

在Scrapy项目的settings.py中配置浏览器UA:

USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'

若在Scrapy Shell中临时测试,可添加headers参数:

fetch('https://www.depop.com/products/saltybrasi-perte-dego-white-lace-shirt/', headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'})

2. 补充完整请求头

模拟真实浏览器的请求头集合,进一步降低被识别为爬虫的概率:

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive'
}
fetch('https://www.depop.com/products/saltybrasi-perte-dego-white-lace-shirt/', headers=headers)

3. (备选)调整重定向设置

Scrapy默认自动处理301重定向,若服务器重定向地址无效,可在settings.py中关闭自动重定向,手动处理跳转:

REDIRECT_ENABLED = False

内容的提问来源于stack exchange,提问作者JBJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 07:01:07