规则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。

lxml 解析字符处理规则的更多相关文章

  1. Python爬虫——使用 lxml 解析器爬取汽车之家二手车信息

    本次爬虫的目标是汽车之家的二手车销售信息,范围是全国,不过很可惜,汽车之家只显示100页信息,每页48条,也就是说最多只能够爬取4800条信息. 由于这次爬虫的主要目的是使用lxml解析器,所以在信息 ...

  2. lxml解析html与元素定位

    lxml.beautifulsoup和正则表达式都可以解析定位html元素.前两者中,lxml比beautifulsoup效率高,所以采用lxml解析html. 方法: from lxml impor ...

  3. 网络爬虫之Selenium模块和Xpath表达式+Lxml解析库的使用

    实际生产环境下,我们一般使用lxml的xpath来解析出我们想要的数据,本篇博客将重点整理Selenium和Xpath表达式,关于CSS选择器,将另外再整理一篇! 一.介绍: selenium最初是一 ...

  4. Python 通过lxml 解析html页面自动组合xpath实例

    #coding:utf-8 ''' @author: li.liu ''' from selenium import webdriver from selenium.webdriver.common. ...

  5. 初学者教程之命名空间,范围解析及LEDB规则

    2014年5月12日 Sebastian Raschka编写 这是一篇关于采用LEGB规则实现Python变量命名空间及范围解析的简短教程.下面章节将会提供简短的可以说明问题的示例代码块来简要阐述问题 ...

  6. Python 之lxml解析库

    一.XPath常用规则 二.解析html文件 from lxml import etree # 读取HTML文件进行解析 def parse_html_file(): html = etree.par ...

  7. python简单爬虫 用lxml解析页面中的表格

    目标:爬取湖南大学2018年在各省的录取分数线,存储在txt文件中 部分表格如图: 部分html代码: <table cellspacing="0" cellpadding= ...

  8. 解决ajax请求返回Json无法解析"\"字符的问题

    原因:获取身份证信息,涉及图片路径,存在“\”字符,导致Json解析错误 解决思路:将返回类型从"json"改成"text",此时返回的数据类型变成字符串,将字 ...

  9. 第二节:web爬虫之lxml解析库

    lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高.

随机推荐

  1. CentOS6.5 切换 图形界面 与 命令行界面

    CentOS6.5 切换图形界面与命令行界面 [1]场景1:图形界面 -> 命令行界面 方式一(快捷键):Ctrl + Alt + F2 方式二(终端命令):init 3 (PS:init与3之 ...

  2. 融云亮相GDG谷歌女性开发者大会 揭秘IMSDK网络优化策略

    4 月 20 日,冷雨阻碍不了天津GDG谷歌女性开发者大会的热烈召开,一众开发者.架构师和科技公司创业者云集一堂,就女性开发者的技术.职场.人生多方面话题展开深入探讨.活动由GDG (谷歌开发者社区) ...

  3. Easy methods to select MB Star, Extremely MB Star, MB SD C4, Mercedes BENZ C5 SD

    MB Star, Extremely MB SD Connect C4, MB SD C4, Mercedes BENZ C5 SD are usually analysis tools to get ...

  4. Linux 下 ls -l 命令执行显示结果的每一列含义【转载】

    转自:zhuoya_的博客 原文地址>>https://blog.csdn.net/zhuoya_/article/details/77418413

  5. redis的架构(一)

    redis认证 redis的认证比较简单,这里简单来说明一下怎么设置redis的认证: redis的配置文件中有一个requirepass字段,在后面直接写上对应的密码即可.默认redis的不开启认证 ...

  6. linux服务基础之http协议

    URI:Uniform Resource Identifier URL: Uniform Resource Locator,用于描述某服务器某特定资源的位置 URN: Uniform Resource ...

  7. P4630 [APIO2018] Duathlon 铁人两项

    思路 圆方树,一个点双中的所有点都可以被经过,所以给圆点赋值-1,方点赋值为圆点个数,统计圆点两两之间的路径权值和即可 代码 #include <cstdio> #include < ...

  8. [Redis] - redis实战1

    rememberMe>>>>:null Creating a new SqlSession SqlSession [org.apache.ibatis.session.defa ...

  9. SpringMVC成员变量并发状态下使用测试

    1.SpringMVC默认是单例的,使用成员变量在并发状态下该成员变量的值是被共享的 测试平台 我们目前正在开发的电商项目  (架构组成SpringCloud + SpringBoot + Sprin ...

  10. python学习之旅(入门)

    一.list 有序集合 1.list 有序集合  L = [95.5, 85, 59]  如L[1] = 85 ,L[-1] = 59  和php中array一个意思  用[] 表示就可以了 2.新增 ...