zoukankan      html  css  js  c++  java
  • lxml 解析字符处理规则

    规则1:无论输入的字符串是何种状态,lxml包接收后一律转换成unicode,其处理结果也是unicodetype,输出到文件时,需要指定编码,转换成特定的stringtype状态.
    规则2:lxml用xpath解析时,如果网页文件申明的编码,与实际传递给lxml的编码不一致,将产生问题.
    情形1,网页编码gb2312,传递给lxml处理,ok
    情形2,网页编码gb2312,转换成unicode后,传递给lxml,ok
    情形3,网页编码gb2312,转换成utf-8后,传递给lxml,不能工作.
    此时需要在转换成utf-8后,也将网页文件的编码声明转换成utf-8.
    lxml的工作原理:
    没有编码声明时,默认是utf-8格式,lxml将用utf-8格式对传入的字符串解码成unicode;
    有编码声明时,如果编码声明的stringtype和实际传入的stringtype编码格式不一致,将不工作.

    document_fromstring方法将文件转换成一棵树html元素,,这个元素里面的东西是按照unicode的方式被包裹的,不能对它的结果使用encode方法.
    lxml.html.tostring(x, pretty_print=True, encoding='utf-8')将按照编码参数,将html元素转换成string,注意结果是stringtype类型.
    text_content(),输出结果是,可以encode,写入文件,或者在终端显示.

    乱码问题:

    处理源文件的时候,由于没有指定编码,所以它使用了一个默认编码,从而导致和UTF-8冲突,产生乱码。

    etree.HTML有一个参数是parser,这个参数不是必须的,因此省略以后它就会自动使用一个默认的parser。可以手动指定一个:

    etree.HTML(r, parser=etree.HTMLParser(encoding='utf-8'))

    这里指定了etree.HTMLParser来作为一个parser,同时,etree.HTMLParser可以接受编码作为参数。于是指定为UTF-8。

  • 相关阅读:
    6.Go-错误,defer,panic和recover
    5.Go-封装、继承、接口、多态和断言
    php 实现店铺装修2
    php 实现店铺装修1
    安装lnmp1.5到最后出现Error: MySQL install failed的解决方法
    wdcp升级php5.8到php7.1.12后安装gitlab
    支付密码设置和登录密码设置
    什么样的女孩适合做老婆
    用邮箱做网页
    生源地助学贷款
  • 原文地址:https://www.cnblogs.com/kidl/p/9329319.html
Copyright © 2011-2022 走看看