解决PyCharm下python使用XPath解析html,获取文本时中文乱码问题


最近在学习XPath解析库,但是获取中文文本时总是乱码,网上看了些教程,然并卵,最后只好自己解决:

文本文件html.txt如下:

<p class="name">
<a href="/films/1297" title="肖申克的救赎" data-act="boarditem-click" data-val="{movieId:1297}">肖申克的救赎</a>
</p>

源文件test.py如下:

from lxml import etree

# 此处采取直接读取文本进行解析的方法
html = etree.parse('html.txt', etree.HTMLParser())
result = html.xpath('//a/text()')
print(result)

运行结果(乱码)如下:


['ФÉê¿ËµÄ¾ÈÊê']	# html.txt编码为:GBK时的结果
['è\x82\x96ç\x94³å\x85\x8bç\x9a\x84æ\x95\x91èµ\x8e']	# html.txt编码为:UTF-8时的结果

解决办法01

先使用open()函数读取html.txt,再将字符串传递给etree.HTML()

源文件test.py如下:

from lxml import etree

f = open('html.txt', 'r')	# 如果文件编码为UTF-8, 记得添加参数:encoding='utf8'
text = f.read()

html = etree.HTML(text, etree.HTMLParser())
result = html.xpath('//a/text()')
print(result)

运行结果如下:


['肖申克的救赎']

解决办法02(推荐)

为解析器etree.HTMLParser()传递一个参数:encoding=‘gbk’,记得,此处编码与文件html.txt一致
推荐该方法,简洁

源文件test.py如下:

from lxml import etree

html = etree.parse('html.txt', etree.HTMLParser(encoding='gbk'))
result = html.xpath('//a/text()')
print(result)

运行结果如下:


['肖申克的救赎']

结语

我正在看的那本书根本就没有使用etree.HTMLParser(encoding=‘gbk’),一律使用etree.HTMLParser()默认版本,多亏了PyCharm的补全功能,让我看见了etree.HTMLParser()的参数列表,第一个参数就是:encoding=None,然后试了下果然解决了中文乱码问题!

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琼觞0543

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值