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发送arp欺骗攻击代码分析
Jan 16 Python
Python检测字符串中是否包含某字符集合中的字符
May 21 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
python开发之str.format()用法实例分析
Feb 22 Python
python采用django框架实现支付宝即时到帐接口
May 17 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
Python KMeans聚类问题分析
Feb 23 Python
使用python生成目录树
Mar 29 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
简述python Scrapy框架
Aug 17 Python
python文件排序的方法总结
Sep 13 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求两个文件的相对路径
2013/06/20 PHP
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
强制PHP命令行脚本单进程运行的方法
2014/04/15 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
php找出指定范围内回文数且平方根也是回文数的方法
2015/03/23 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
2016/06/12 PHP
Yii实现Command任务处理的方法详解
2016/07/14 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
一个网马的tips实现分析
2010/11/28 Javascript
JS多物体 任意值 链式 缓冲运动
2012/08/10 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
javascript计算星座属相(十二生肖属相)示例代码
2014/01/09 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
Node.js开发教程之基于OnceIO框架实现文件上传和验证功能
2016/11/30 Javascript
Angular2学习笔记——详解路由器模型(Router)
2016/12/02 Javascript
js实现二级导航功能
2017/03/03 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
超级简易的JS计算器实例讲解(实现加减乘除)
2017/08/08 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
python检测远程udp端口是否打开的方法
2015/03/14 Python
Python实现全排列的打印
2018/08/18 Python
python 定时任务去检测服务器端口是否通的实例
2019/01/26 Python
pyqt 实现在Widgets中显示图片和文字的方法
2019/06/13 Python
python之mock模块基本使用方法详解
2019/06/27 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
Melissa鞋马来西亚官方网站:MDreams马来西亚
2018/04/05 全球购物
复古服装:RetroStage
2019/05/10 全球购物
自动化毕业生专业自荐书范文
2014/02/04 职场文书
民事诉讼代理委托书
2014/10/08 职场文书
2014年政协工作总结
2014/12/09 职场文书
离婚协议书怎么写的
2014/12/14 职场文书
唐山大地震观后感
2015/06/05 职场文书
600字作文之感受大自然
2019/11/27 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python