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。

  • 相关阅读:
    关于ArcGIS Server VS2010无法显示发布的地图服务
    NDK,动态链接库,JNI
    android开发中一些报错的解决方法
    查询死锁对象
    pb导入excel文件
    n_cst_ping在powerbuilder 11 中的变化,一面的程序可正常ping
    SQL拼音
    数据库优化
    android调用asp.net webservice,返回json结构
    iframe内部需要弹出浮层问题
  • 原文地址:https://www.cnblogs.com/kidl/p/9329319.html
Copyright © 2011-2022 走看看