Python爬虫抓取亚马逊数据返回乱码,有经验的帮忙指点一下

上个星期,测试直接用 requests 请求目标页面,headers 里面就设置了一下 user-agent、host,都能正常返回数据。这个星期再测试,发现返回了一堆乱码。测试的时候,请求次数并不多,加起来才几十次,换了一台机器直接测试,也是一样。于是上 burpsuite 抓包,返回包片段这样的: resp_data

一般来说,爬虫获取到乱码也不是什么很奇怪的事情,很多情况下是对方判定请求来源为爬虫后,故意整的,可这次让我觉得疑惑的是,上面这个截图的返回内容,在浏览器里面显示是正常的。也就是说,我把 burp 的拦截设置为 off,浏览器请求目标页面后,同样的返回数据,在 burp 的 response 看到的是乱码,但浏览器却能正常解析。

这是什么原理?返回内容里包含 js,检测是否浏览器环境?

这是首次遇到这种情况,还望有经验的指点一下。


Python爬虫抓取亚马逊数据返回乱码,有经验的帮忙指点一下

9 回复

https 呗


遇到亚马逊页面乱码,通常是编码问题。亚马逊页面可能使用UTF-8或其他编码,但你的爬虫默认设置可能不匹配。检查响应头中的Content-Type,或者直接指定编码。

import requests
from bs4 import BeautifulSoup

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}

url = 'https://www.amazon.com/dp/B08N5WRWNW'
response = requests.get(url, headers=headers)

# 方法1:优先使用apparent_encoding
response.encoding = response.apparent_encoding

# 方法2:手动指定UTF-8(如果方法1不行)
# response.encoding = 'utf-8'

soup = BeautifulSoup(response.text, 'html.parser')
print(soup.prettify()[:500])  # 打印前500字符检查

如果还是乱码,可能是亚马逊的反爬机制返回了压缩内容,需要处理Content-Encoding

import requests
import brotli

headers = {'User-Agent': 'Mozilla/5.0', 'Accept-Encoding': 'gzip, deflate, br'}
response = requests.get(url, headers=headers)

if response.headers.get('Content-Encoding') == 'br':
    content = brotli.decompress(response.content)
    html = content.decode('utf-8')
else:
    html = response.text

print(html[:500])

总结:先检查编码,再处理压缩。

看 content encoding,brotil 编码

网易云课堂有一门专门的爬虫课就是讲爬 amazon 的~

经二楼提醒,问题已经解决了。谢谢。

你看到的乱码不一定是乱码

上周监测到大量来自中国的 robot,还把 agent 伪装成 Android…

亚马逊的?

第一次知道这个 brotil 编码,涨知识了。

回到顶部