生成PNG与HTML文本文件异常:HTML文本文件内容为空求助
解决HTML文本保存为空的问题
看起来你这里踩了个小坑——你正在处理的response返回的是图片的二进制数据,不是HTML内容!
你看,第一个保存image.png的逻辑是对的,因为直接把二进制的response.body写入文件就是图片。但第二个操作里,你把图片的二进制数据尝试解码成UTF-8字符串,这根本得不到有效内容(甚至大概率会抛出解码错误),最后写入text.txt自然是空的或者乱码。
问题根源
你混淆了两个不同的请求响应:
- 图片请求的
response:body是二进制图片流,完全没有HTML内容 - HTML页面请求的
response:body是HTML文本的二进制编码,解码后才是有效HTML
解决方案
找准响应对象:确保你在处理返回HTML的那个请求的
response,而不是图片请求的。比如你的爬虫里应该有两个不同的解析方法,分别处理页面和图片请求。修正文本保存代码:保存HTML文本时,用正确的文件模式和方法:
def parse_html_response(self, response): # 直接用response.text,它会自动帮你处理编码问题 with open('text.txt', 'w', encoding='utf-8') as f: f.write(response.text)
如果一定要手动解码,也应该用w模式(不是wb,wb是写二进制用的):
with open('text.txt', 'w', encoding='utf-8') as f: f.write(response.body.decode('utf-8'))
- 快速验证响应类型:可以先打印
response.headers['Content-Type']确认,图片请求的Content-Type是image/png之类的,而HTML请求的是text/html。
内容的提问来源于stack exchange,提问作者Alex D
相关产品推荐
相关产品推荐

