使用requests+justext提取网页内容遇gzip解码错误求助
问题根因
报错requests.exceptions.ContentDecodingError来自两个核心原因:
- 目标站点
yoursoccerhome.com服务端配置异常,响应头声明内容使用gzip压缩,但实际返回的内容不符合gzip格式规范,requests默认触发自动解压逻辑时就会报头校验失败 - 站点配置了基础反爬规则,识别到requests默认的爬虫标识User-Agent后,故意返回损坏的响应拦截请求,你换另一个域名能正常运行,就是因为对应站点没有这类拦截策略。
修复方案
两步调整就能解决:
- 给请求加上普通浏览器的请求头,绕过基础反爬识别
- 直接获取原始响应字节传给justext即可,justext本身支持解析原始响应内容。
修正后的可运行代码如下:
import requests import justext # 模拟普通浏览器的请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36" } url = 'https://yoursoccerhome.com/what-is-a-cap-in-soccer-the-meaning-and-history-of-the-term/' response = requests.get(url, headers=headers) raw_content = response.content paragraphs = justext.justext(raw_content, justext.get_stoplist("English")) for paragraph in paragraphs: if not paragraph.is_boilerplate: print(paragraph.text)
注意:你原代码里存在缩进错误,
if not paragraph.is_boilerplate:判断下的
如果调整后仍然碰到解压报错,可以直接在headers里加一行配置,强制要求服务器返回未压缩的明文内容,彻底绕开解压逻辑:
headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36", "Accept-Encoding": "identity" }
内容的提问来源于stack exchange,提问作者Mike Boulton
相关产品推荐
相关产品推荐

