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中list循环语句用法实例
Nov 10 Python
python 简单的多线程链接实现代码
Aug 28 Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 Python
Python内置函数 next的具体使用方法
Nov 24 Python
python实现批量图片格式转换
Jun 16 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
Django框架中序列化和反序列化的例子
Aug 06 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 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中str_replace函数使用小结
2008/10/11 PHP
支持中文的php加密解密类代码
2011/11/27 PHP
基于php设计模式中单例模式的应用分析
2013/05/15 PHP
PHP遍历目录并返回统计目录大小
2014/06/09 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
Js+XML 操作
2006/09/20 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
深入理解JavaScript系列(35):设计模式之迭代器模式详解
2015/03/03 Javascript
js 提交form表单和设置form表单请求路径的实现方法
2016/10/25 Javascript
Vue响应式原理详解
2017/04/18 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
React Native中Mobx的使用方法详解
2018/12/04 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
vue如何使用async、await实现同步请求
2019/12/09 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
python发送伪造的arp请求
2014/01/09 Python
python中zip和unzip数据的方法
2015/05/27 Python
Python守护进程用法实例分析
2015/06/04 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Python实现Dijkstra算法
2018/10/17 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python实现烟花小程序
2019/01/30 Python
解决pyinstaller打包运行程序时出现缺少plotly库问题
2020/06/02 Python
如何在 Matplotlib 中更改绘图背景的实现
2020/11/26 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
实现CSS3中的border-radius(边框圆角)示例代码
2013/07/19 HTML / CSS
Fashion Eyewear美国:英国线上设计师眼镜和太阳镜的零售商
2016/08/15 全球购物
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
Smashbox英国官网:美国知名彩妆品牌
2017/11/13 全球购物
银行求职自荐信范文
2015/03/04 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
七年级作文之冬景
2019/11/07 职场文书
关于Javascript闭包与应用的详解
2021/04/22 Javascript
Python 正则模块详情
2021/11/02 Python
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL