Python爬取Facebook Messenger聊天:UTF-8编码响应无法解码问题
解决Messenger聊天记录爬取中响应解码失败的问题
嘿,我之前也碰到过一模一样的糟心事——请求明明返回200,res.encoding也显示是UTF-8,但就是死活解不开响应内容,盯着一堆乱码头都大了!咱们一步步来排查和解决这个问题:
可能的原因及对应解决方案
1. 响应内容被压缩了(gzip/deflate格式)
很多网站会自动压缩响应内容,哪怕你没在请求头里指定,requests有时候也可能没自动处理好(尤其是请求头里没带Accept-Encoding的时候)。
- 排查方法:打印响应头看看有没有
Content-Encoding: gzip或Content-Encoding: deflate字段。 - 解决代码:
import gzip from io import BytesIO def download_thread(self, limit, offset, thread_id): # 你的请求逻辑... res = requests.post(url, headers=headers, data=data) # 处理gzip压缩内容 if 'Content-Encoding' in res.headers and res.headers['Content-Encoding'] == 'gzip': content = gzip.decompress(res.content) else: content = res.content # 再尝试解码 try: text = content.decode('utf-8') print(text[:500]) # 先看前500字符确认 except UnicodeDecodeError: # 走其他解码逻辑 pass
2. 响应是二进制格式(比如Protocol Buffers)
Messenger的私有API大概率不会返回纯文本/JSON,而是用Protocol Buffers(protobuf)这种二进制序列化格式传输内容——你直接用UTF-8解码二进制数据,肯定会乱码。
- 排查方法:打开Chrome开发者工具的「响应」标签,看是不是标注了
Binary,或者内容开头有protobuf的特征字节(比如\x08、\x12这类)。 - 解决思路:
- 找Messenger API对应的protobuf定义文件(网上能搜到一些开源的),用
protobuf库解析二进制内容; - 检查请求体里的参数,有没有类似
format=json的选项(部分私有API支持切换返回格式)。
- 找Messenger API对应的protobuf定义文件(网上能搜到一些开源的),用
3. res.encoding检测不准
requests自动检测的编码有时候会出错,服务器返回的Content-Type头里的编码可能和实际内容不符。
- 解决方法:用第三方库检测真实编码:
import chardet content = res.content encoding_result = chardet.detect(content) # 用检测到的编码解码 try: text = content.decode(encoding_result['encoding']) except UnicodeDecodeError: # 兜底用ISO-8859-1解码(至少能拿到可转码的内容) text = content.decode('ISO-8859-1')
4. 看似200,实际是无效响应
有时候服务器返回200,但内容其实是登录页面、错误提示页(比如会话过期、认证失效),这类HTML内容可能包含非UTF-8编码的字符,或者你没拿到真正的聊天数据。
- 排查方法:直接打印
res.content的前100个字节,看看是不是HTML标签(比如<html>、<head>),如果是,说明你的请求头里的Cookie、Authorization等认证参数过期或不正确了。 - 解决思路:重新从Chrome开发者工具复制最新的Cookie和认证头,确保请求和浏览器的会话状态一致。
调试小技巧
每次请求后先做这几步:
- 打印
res.headers,重点看Content-Type、Content-Encoding字段; - 打印
res.content[:100],直观判断是压缩内容、二进制还是HTML; - 先不解码,用
base64.b64encode(res.content)把内容转成base64,对比浏览器里的响应内容是否一致,确认请求没发错。
另外提醒一句:Messenger的私有API违反Facebook的服务条款,爬取聊天记录可能有账号风险,谨慎操作哦!
内容的提问来源于stack exchange,提问作者Taako
相关产品推荐
相关产品推荐

