您的位置:首页 > 编程语言 > Python开发

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

2018-11-11 19:36 1176 查看

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

  • 解决办法01
  • 解决办法02(推荐)

  • 最近在学习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,然后试了下果然解决了中文乱码问题!

    阅读更多
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: 
    相关文章推荐