Python爬取斗鱼网站LOL分区时,获取的网页数据是经过压缩的,如何正确解压?
1.爬取网页: https://www.douyu.com/g_LOL
2.采用方法:只是初步接触爬虫,没有用额外的库。基本实现思路 :
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}
url = 'https://www.douyu.com/g_LOL'
req = request.Request(url, headers=headers)
r = request.urlopen(req)
buff = BytesIO(r.read())
f = gzip.GzipFile(fileobj=buff)
htmls = f.read().decode(‘utf-8’)
3.结果 爬取的网页中间出现了大量的数字乱码,例如:
47 14.4 14.4s-6.447 14.4-14.4 14.4z"/><path d="M20.331 18.069c0.625 0.625 0.625 1.638 0 2.263s-1.638 0.625-2.
并且,在调试到
req = request.Request(url, headers=headers)
时,弹出<string>文档,显示:</string>
无法加载源“<string>”: Source unavailable。
4.我认为可能是对爬来的数据解压方式不对,多谢帮忙!
Python爬取斗鱼网站LOL分区时,获取的网页数据是经过压缩的,如何正确解压?
7 回复
这个是 svg,多用于图标
遇到斗鱼网页数据压缩的问题,通常是因为服务器返回了gzip压缩的响应。直接用requests库的text属性会自动解压,但如果你直接处理content可能会遇到乱码。这里给你一个完整的解决方案:
import requests
import gzip
from io import BytesIO
def fetch_douyu_lol_data():
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Encoding': 'gzip, deflate', # 告诉服务器支持压缩
}
url = 'https://www.douyu.com/g_LOL' # LOL分区地址
try:
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status() # 检查HTTP错误
# 方法1:直接使用requests自动解压(推荐)
if response.encoding is None:
response.encoding = 'utf-8'
html_content = response.text
print("自动解压成功,内容长度:", len(html_content))
# 方法2:手动解压(如果需要处理原始压缩数据)
if response.headers.get('Content-Encoding') == 'gzip':
compressed_data = response.content
# 使用gzip模块解压
buffer = BytesIO(compressed_data)
with gzip.GzipFile(fileobj=buffer, mode='rb') as f:
decompressed_data = f.read().decode('utf-8')
print("手动解压成功,内容长度:", len(decompressed_data))
return html_content
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None
except gzip.BadGzipFile as e:
print(f"解压失败: {e}")
return None
# 使用示例
if __name__ == "__main__":
data = fetch_douyu_lol_data()
if data:
# 这里可以添加你的解析逻辑
print("前500字符预览:", data[:500])
关键点说明:
requests库默认会处理gzip压缩,直接用response.text即可- 检查响应头
Content-Encoding确认是否压缩 - 手动解压时用
gzip.GzipFile处理二进制数据 - 记得设置正确的编码(通常UTF-8)
常见问题排查:
- 如果看到乱码,检查编码设置
- 如果解压失败,确认数据确实是gzip格式
- 有些页面可能有动态加载,可能需要处理JavaScript渲染
直接用requests的自动解压就行,手动解压只是备用方案。
简单的看了看。
1. 这些 path 都是 svg
2. 可以试试用 beautifulsoup
react 写的,有没有加后端渲染,拿不了东西。
<path d=""> 这是 SVG,d 是绘图指令
是 svg 网页矢量图 可以自己写个 html 把数据放进去 自己用浏览器打开看看


