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

使用Requests库抓取内容返回200但r.content为空的问题排查求助

问题分析与解决方案

嘿,我来帮你排查下这个问题——返回200 OK但内容为空,通常是服务器识别出你的请求不是来自正规浏览器,或者缺少必要的请求参数导致的。下面是几个最可能的原因和对应的解决办法:

1. 缺少关键请求头(尤其是User-Agent)

很多网站会通过检查User-Agent字段来判断请求是否来自真实浏览器。你的代码里没有设置任何请求头,服务器可能直接返回空内容作为反爬策略。

解决方法:给请求添加模拟浏览器的请求头,比如:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

r = requests.post(
    url='https://icecat.us/index.php/product/offers',
    headers=headers
)
print(r.status_code)
print(r.content)

2. POST请求未携带必要的表单参数

你现在的POST请求没有提交任何数据,但浏览器发起这个请求时,肯定携带了相关参数(比如商品ID、SKU等)。服务器在缺少这些参数的情况下,可能返回空内容。

解决方法:打开浏览器开发者工具的「Network」标签,找到这个POST请求,查看「Form Data」或「Payload」里的参数,然后把这些参数通过data或json参数传给requests.post。比如:

# 假设从开发者工具里拿到的参数是这些
payload = {
    'product_id': '12345',
    'sku': 'ABC123'
}

r = requests.post(
    url='https://icecat.us/index.php/product/offers',
    headers=headers,
    data=payload
)

3. 缺少会话Cookie

浏览器访问网站时,会自动保存服务器设置的Cookie(比如会话ID),而requests默认是全新的会话,没有这些Cookie。服务器可能会因为没有有效会话而返回空内容。

解决方法:使用requests.Session()来保持会话,或者从浏览器里复制Cookie到请求头:

# 方法1:使用Session保持会话
session = requests.Session()
session.headers.update(headers)
# 先访问首页获取Cookie
session.get('https://icecat.us/')
# 再发起POST请求
r = session.post('https://icecat.us/index.php/product/offers', data=payload)

# 方法2:手动添加Cookie
headers['Cookie'] = '这里复制浏览器里的Cookie内容'
r = requests.post(url='https://icecat.us/index.php/product/offers', headers=headers, data=payload)

4. 动态内容渲染(可能性稍低)

如果前面的方法都没用,可能网站的内容是通过JavaScript动态生成的,requests只能获取静态HTML,无法执行JS。这种情况下你需要用Selenium或Playwright这类工具模拟浏览器渲染。

先从前面三个原因入手排查,应该能解决你的问题!

内容的提问来源于stack exchange,提问作者Dan P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:56:38