Python中如何将爬取到的十六进制编码转换为正常可读文本
问题根因
你之前的转换方案全部失效,核心是认错了待处理内容的编码格式:字符串里ç、ã这类内容是HTML十六进制字符实体,不是Python原生支持的Unicode转义序列,所以针对Python原生转义的处理逻辑全部不生效。另外你第一次调用encode时参数拼写错误,把utf-8错写为ut-8,代码本身就会抛出编码LookupError。
推荐解决方案
方案1:用Python标准库html模块转换(最适配爬虫场景)
Python3内置的html模块自带HTML实体反转义能力,不需要安装任何第三方依赖,调用html.unescape()即可一次性转换所有格式的HTML实体(包括十六进制实体、十进制实体、HTML命名实体),代码如下:
import html raw_text = 'Hospital Nossa Senhora da Conceição, Porto Alegre, Brazil,Hospital de Base São José do Rio Preto, São José Do Rio Preto, Brazil' clean_text = html.unescape(raw_text) print(clean_text)
运行后输出和你预期完全一致:
Hospital Nossa Senhora da Conceição, Porto Alegre, Brazil,Hospital de Base São José do Rio Preto, São José Do Rio Preto, Brazil
方案2:爬虫解析阶段自动处理
如果你是用BeautifulSoup这类HTML解析库爬取的内容,不需要单独做字符串转换:正常调用.text提取页面文本时,解析库会自动把所有HTML实体转成对应可读字符,从源头就不会拿到带实体的原始字符串。
之前方案失效说明
- 直接调用
encode("utf-8")的作用是把字符串按UTF-8规则转成字节对象,本身没有识别、转换HTML实体的逻辑,不可能得到正确结果 text.encode('utf-8').decode('unicode-escape')这套逻辑只对Python原生的\xXX、\uXXXX格式转义生效,对HTML实体特有的&+#前缀格式完全不识别,自然转换失败
内容的提问来源于stack exchange,提问作者Ad_sh
相关产品推荐
相关产品推荐

