爬虫小问题之以为是编码问题,却是headers中参数问题

本文详细解释了HTTP头部字段Accept-Encoding的作用及意义,特别是gzip,deflate的含义。并提供了一种解决方案,即直接移除该头部参数以避免压缩相关的问题。

Accept-Encoding为gzip,deflate的含义

Accept-Encoding是用来设置从服务端返回的数据是否进行gzip压缩(gzip是一种数据格式,默认目前仅使用deflate算法压缩data部分)。 
也就是说,如果客户端设置了gzip,deflate,等于告诉服务端,客户端是支持gzip格式的数据解压缩的。 
若服务端支持gzip,deflate压缩方式,则客户端收到的数据则为gzip格式压缩的。

解决方案

第一种解决方案:

直接去掉headers中      “Accept-Encoding”, “gzip,deflate”     参数
项目中,我们也是采用的此方法。

转载于:https://www.cnblogs.com/QimiSun/p/10319680.html

### 解决 Python 网页爬虫中的中文乱码问题 #### 1. 使用 `requests` 库获取网页内容并处理编码 为了防止因默认编码设置不当而导致的乱码现象,在使用 `requests.get()` 方法时可以先通过 `.content` 获取原始字节数据,再手动指定解码方式: ```python import requests url = "http://example.com" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)', } response = requests.get(url, headers=headers) # 尝试检测页面的真实编码 if response.encoding == 'ISO-8859-1': encodings = ['utf-8', 'gb2312'] for encoding in encodings: try: content = response.content.decode(encoding) break except UnicodeDecodeError: continue else: content = response.text ``` 此段代码尝试识别服务器返回的实际编码格式,并优先考虑常见的 UTF-8 或 GBK 编码[^1]。 #### 2. 处理特定类型的压缩算法(如 Brotli) 某些现代网站可能会采用更高效的压缩技术来减少传输的数据量。如果遇到 `'Content-Encoding': 'br'` 这样的情况,则需要引入额外的支持库来进行解压操作: ```python import brotli key = 'Content-Encoding' if key in response.headers and response.headers[key] == 'br': decompressed_data = brotli.decompress(response.content).decode('utf-8') else: decompressed_data = response.text ``` 这段逻辑能够有效应对由 Brotli 压缩引起的潜在乱码问题[^3]。 #### 3. 利用 BeautifulSoup 正确解析 HTML 文档 在创建 Beautiful Soup 对象时显式指明文档的编码有助于避免不必要的麻烦: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(content, features="html.parser", from_encoding='utf-8') print(soup.prettify()) ``` 这里特别强调了 `from_encoding` 参数的重要性,它可以帮助我们更好地控制输入流的解释过程。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值