使用Beautiful Soup去除HTML标签时返回奇怪字符的问题
解决BeautifulSoup去除HTML标签时出现奇怪字符的问题
嘿,我来帮你搞定这个奇怪字符的问题!结合你的代码来看,最可能的原因和对应的解决方案如下:
一、核心问题:未处理gzip压缩的响应
你在headers里设置了Accept-Encoding: gzip, def...(看起来还截断了),服务器返回了gzip压缩后的内容,但你的代码没有正确处理解压,直接解析的话就会出现乱码/奇怪字符。
二、具体修复步骤
修复请求头,让requests自动处理压缩
requests的Session默认会自动解码gzip/deflate格式的响应,所以你可以直接去掉Accept-Encoding字段,或者写完整的取值,避免截断:headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8' # 要么删掉下面这行,要么写完整:'Accept-Encoding': 'gzip, deflate, br' }使用正确的响应内容方式
要用response.text来获取解码后的文本内容,而不是response.content(原始字节),这样BeautifulSoup才能正确解析:response = session.get(url, headers=headers) # 用response.text而不是response.content soup = BeautifulSoup(response.text, 'html.parser')补全缺失的导入语句
你的代码里用到了sys.path.append但没导入sys,这会直接报错,记得补上:import sys # 补上这个导入 import SelectProxy from bs4 import BeautifulSoup, NavigableString import requests import json sys.path.append("G:\\Python27\\Kodi")指定解析器避免兼容问题
Python2.7下使用BeautifulSoup时,建议明确指定解析器(比如html.parser或lxml),避免默认解析器带来的异常:soup = BeautifulSoup(response.text, 'html.parser')
三、测试提取纯文本的示例
修复后,你可以这样提取页面的纯文本,验证是否还有奇怪字符:
# 提取页面所有纯文本,strip=True去除多余空白 clean_text = soup.get_text(strip=True) print(clean_text)
内容的提问来源于stack exchange,提问作者gdogg371
相关产品推荐
相关产品推荐

