1. 程式人生 > >解決PyCharm下python使用XPath解析html,獲取文字時中文為亂碼問題

解決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,然後試了下果然解決了中文亂碼問題!