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下的Mysql模块MySQLdb安装详解
Apr 09 Python
python创建线程示例
May 06 Python
用python结合jieba和wordcloud实现词云效果
Sep 05 Python
Python paramiko模块的使用示例
Apr 11 Python
python中实现控制小数点位数的方法
Jan 24 Python
Django使用模板后无法找到静态资源文件问题解决
Jul 19 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
使用matlab或python将txt文件转为excel表格
Nov 01 Python
Python 3 使用Pillow生成漂亮的分形树图片
Dec 24 Python
Numpy与Pytorch 矩阵操作方式
Dec 27 Python
pytorch之添加BN的实现
Jan 06 Python
Python实现将多张图片合成MP4视频并加入背景音乐
Apr 28 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下载excel无法打开的解决方法
2013/12/24 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
php生成图片验证码
2015/06/09 PHP
php使用PDO下exec()函数查询执行后受影响行数的方法
2017/03/28 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
php生成HTML文件的类方法
2019/10/11 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
js判断一个字符串是以某个字符串开头的简单实例
2016/12/27 Javascript
JavaScript日期对象(Date)基本用法示例
2017/01/18 Javascript
Bootstrap框架安装使用详解
2017/01/21 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
python读取excel表格生成erlang数据
2017/08/26 Python
python读取文本中数据并转化为DataFrame的实例
2018/04/10 Python
redis之django-redis的简单缓存使用
2018/06/07 Python
pandas将numpy数组写入到csv的实例
2018/07/04 Python
django框架模型层功能、组成与用法分析
2019/07/30 Python
tensorflow之tf.record实现存浮点数数组
2020/02/17 Python
PyQt5实现简单的计算器
2020/05/30 Python
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
DIY蛋糕店的创业计划书范文
2013/12/26 职场文书
小班开学寄语
2014/04/04 职场文书
超市创业计划书
2014/09/15 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
Python包argparse模块常用方法
2021/06/04 Python
MySQL的索引你了解吗
2022/03/13 MySQL
JavaWeb Servlet开发注册页面实例
2022/04/11 Java/Android