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逐行读取文件内容的三种方法
Jan 20 Python
python使用BeautifulSoup分析网页信息的方法
Apr 04 Python
Mac 上切换Python多版本
Jun 17 Python
python3+PyQt5图形项的自定义和交互 python3实现page Designer应用程序
Jul 20 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
django admin 根据choice字段选择的不同来显示不同的页面方式
May 13 Python
使用keras内置的模型进行图片预测实例
Jun 17 Python
Python之字典添加元素的几种方法
Sep 30 Python
PyTorch中的拷贝与就地操作详解
Dec 09 Python
python异步的ASGI与Fast Api实现
Jul 16 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 删除记录实现代码
2009/03/12 PHP
解决php使用异步调用获取数据时出现(错误c00ce56e导致此项操作无法完成)
2013/07/03 PHP
php实现按指定大小等比缩放生成上传图片缩略图的方法
2014/12/15 PHP
php微信公众平台开发类实例
2015/04/01 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
javascript根据像素点取位置示例
2014/01/27 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
几种tab切换详解
2017/02/03 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
vue生命周期实例小结
2018/08/15 Javascript
浅谈目前可以使用ES10的5个新特性
2019/06/25 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
python的变量与赋值详细分析
2017/11/08 Python
Python判断文件和字符串编码类型的实例
2017/12/21 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
解决Jupyter notebook更换主题工具栏被隐藏及添加目录生成插件问题
2020/04/20 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
ALDO美国官网:加拿大女鞋品牌
2018/12/28 全球购物
TALLY WEiJL法国网上商店:服装、时装及配饰
2019/08/31 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
如何查找网页漏洞
2016/06/22 面试题
皮肤科医师岗位职责
2013/12/04 职场文书
怎样客观的做好自我评价
2013/12/28 职场文书
集中采购方案
2014/06/10 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
团支部书记竞选稿
2015/11/21 职场文书
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS