python lxml中etree的简单应用


Posted in Python onMay 10, 2019

我一般都是通过xpath解析DOM树的时候会使用lxml的etree,可以很方便的从html源码中得到自己想要的内容。

这里主要介绍一下我常用到的两个方法,分别是etree.HTML()和etree.tostrint()。

1.etree.HTML()

etree.HTML()可以用来解析字符串格式的HTML文档对象,将传进去的字符串转变成_Element对象。作为_Element对象,可以方便的使用getparent()、remove()、xpath()等方法。

如果想通过xpath获取html源码中的内容,就要先将html源码转换成_Element对象,然后再使用xpath()方法进行解析。例如,这里有一段最简单的html源码:"<html><body><h1>This is a test</h1></body></html>",现在想要得到h1标签中的文本,可以这样实现:

# encoding=utf8
 
from lxml import etree
 
html = '<html><body><h1>This is a test</h1></body></html>'
# 将html转换成_Element对象
_element = etree.HTML(html)
# 通过xpath表达式获取h1标签中的文本
text = _element.xpath('//h1/text()')
print 'result is: ', text

结果:

result is: ['This is a test']

通过结果可以知道,xpath()方法放回的结果是一个列表,所以通常在取xpath()方法结果的时候,只取列表中的第一个元素。

2.etree.tostring()

etree.tostring()方法用来将_Element对象转换成字符串。一般通过简单的xpath表达式无法得到想要的内容的时候我就会用该方法。例如,将上面的html小改动一下:"<html><body><h1>This <a>is a </a>test</h1></body></html>",这时候如果想要得到h1中的文本该怎么办呢?使用“//h1/text()”试试(将上面的html保存并用火狐浏览器打开,然后在FirePath中输入该xpath表达式):

python lxml中etree的简单应用

通过截图左下角的提示可以知道,使用xpath表达式“//h1/text()”只能得到h1标签中文本的“This”和“test”,用代码实现看看:

# encoding=utf8
 
from lxml import etree
 
html = '<html><body><h1>This <a>is a </a>test</h1></body></html>'
_element = etree.HTML(html)
text = _element.xpath('//h1/text()')
print 'result is: ', text

运行结果:

result is: ['This ', 'test']

确实,使用xpath()方法,只能得到h1中部分文本内容,我们再试试使用“//h1//text()”看看:

python lxml中etree的简单应用

然后通过代码实现看看:

# encoding=utf8
 
from lxml import etree
 
html = '<html><body><h1>This <a>is a </a>test</h1></body></html>'
_element = etree.HTML(html)
text = _element.xpath('//h1//text()')
print 'result is: ', text

运行结果:

result is: ['This ', 'is a ', 'test']

通过“//h1//text()”表达式确实可以得到想要的内容,但是得到的是一个列表,还需要将列表中的所有元素“拼”起来才行,是不是有点麻烦。这时候,就可以考虑使用etree.tostring()方法了,etree.tostring()方法可以传递多个参数,包括element_or_tree、encoding、method等,其中method参数为text的时候,表示返回_Element对象中的所有文本,所以可以这样:

# encoding=utf8
 
from lxml import etree
 
html = '<html><body><h1>This <a>is a </a>test</h1></body></html>'
_element = etree.HTML(html)
# 先找到h1对象,然后通过etree.tostring方法找到h1对象中的所有文本
_h = _element.xpath('//h1')
# 注意,xpath方法返回的是一个列表,我们需要的是列表中的第一个元素:代表h1标签的_Element对象
result = etree.tostring(_h[0], method='text')
print 'result is: ', result

运行结果:

result is: This is a test

这时候使用etree.tostring()方法是不是很容易的就解决问题了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python让图片按照exif信息里的创建时间进行排序的方法
Mar 16 Python
Python对文件操作知识汇总
May 15 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
Python语言快速上手学习方法
Dec 14 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
Python高级特性与几种函数的讲解
Mar 08 Python
提升Python程序性能的7个习惯
Apr 14 Python
python上传时包含boundary时的解决方法
Apr 08 Python
Python中如何引入第三方模块
May 27 Python
详解Pandas 处理缺失值指令大全
Jul 30 Python
教你怎么用Python实现多路径迷宫
Apr 29 Python
Python OpenCV实现图形检测示例详解
Apr 08 Python
基于Python的PIL库学习详解
May 10 #Python
python导入坐标点的具体操作
May 10 #Python
python简单验证码识别的实现方法
May 10 #Python
eclipse创建python项目步骤详解
May 10 #Python
Python实现字符型图片验证码识别完整过程详解
May 10 #Python
使用python PIL库实现简单验证码的去噪方法步骤
May 10 #Python
使用selenium模拟登录解决滑块验证问题的实现
May 10 #Python
You might like
PHP初学者头疼问题总结
2006/07/08 PHP
php读取数据库信息的几种方法
2008/05/24 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
SeaJS入门教程系列之SeaJS介绍(一)
2014/03/03 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
2020/01/08 Javascript
iview实现图片上传功能
2020/06/29 Javascript
JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记
2020/07/15 Javascript
Javascript如何实现扩充基本类型
2020/08/26 Javascript
[05:37]DOTA2-DPC中国联赛 正赛 Elephant vs iG 选手采访
2021/03/11 DOTA
Python中属性和描述符的正确使用
2016/08/23 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
python实现从尾到头打印单链表操作示例
2020/02/22 Python
python实现图片横向和纵向拼接
2020/03/05 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
自动化系在校本科生求职信
2013/10/23 职场文书
创建省级文明单位实施方案
2014/02/27 职场文书
合作协议书怎么写
2014/04/18 职场文书
村委会换届选举方案
2014/05/03 职场文书
2014年作风建设心得体会
2014/10/22 职场文书
2014年行政工作总结
2014/11/19 职场文书
4S店客服专员岗位职责
2015/04/07 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
2015入党个人自传范文
2015/06/26 职场文书
MySQL的存储过程和相关函数
2022/04/26 MySQL