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。

转载于:https://www.cnblogs.com/kidl/p/9329319.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值