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 相关文章推荐
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
详解Python中类的定义与使用
Apr 11 Python
Python 2.x如何设置命令执行的超时时间实例
Oct 19 Python
matplotlib绘制动画代码示例
Jan 02 Python
python自动发邮件库yagmail的示例代码
Feb 23 Python
基于python中theano库的线性回归
Aug 31 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
Pytorch使用MNIST数据集实现基础GAN和DCGAN详解
Jan 10 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
Numpy中ndim、shape、dtype、astype的用法详解
Jun 14 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 文本文件的读取效率
2012/02/10 PHP
记录PHP错误日志 display_errors与log_errors的区别
2012/10/09 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
超清晰的document对象详解
2007/02/27 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
js判断字符长度及中英文数字等
2014/03/19 Javascript
jQuery使用empty()方法删除元素及其所有子元素的方法
2015/03/26 Javascript
javascript实现youku的视频代码自适应宽度
2015/05/25 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
JavaScript来实现打开链接页面的简单实例
2016/06/02 Javascript
jQuery 判断是否包含在数组中Array[]的方法
2016/08/03 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
python面向对象法实现图书管理系统
2019/04/19 Python
Python实现搜索算法的实例代码
2020/01/02 Python
Python气泡提示与标签的实现
2020/04/01 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
Book Depository欧盟:一家领先的国际图书零售商
2019/05/21 全球购物
基层工作经历证明
2014/01/13 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
初中数学教学反思范文
2016/02/17 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书