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实现数通设备tftp备份配置文件示例
Apr 02 Python
Python高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
python安装以及IDE的配置教程
Apr 29 Python
在Python下进行UDP网络编程的教程
Apr 29 Python
python列出目录下指定文件与子目录的方法
Jul 03 Python
windows系统下Python环境搭建教程
Mar 28 Python
python得到单词模式的示例
Oct 15 Python
PyQt5 QTable插入图片并动态更新的实例
Jun 18 Python
Python基于BeautifulSoup爬取京东商品信息
Jun 01 Python
浅谈keras2 predict和fit_generator的坑
Jun 17 Python
Python 使用双重循环打印图形菱形操作
Aug 09 Python
python实现单机五子棋
Aug 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php 获取mysql数据库信息代码
2009/03/12 PHP
Laravel 5框架学习之Laravel入门和新建项目
2015/04/07 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
推荐一款jQuery插件模板
2015/01/09 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
微信小程序实现点击返回顶层的方法
2017/07/12 Javascript
vue中如何创建多个ueditor实例教程
2017/11/14 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
Python中利用原始套接字进行网络编程的示例
2015/05/04 Python
Python3计算三角形的面积代码
2017/12/18 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
Python类装饰器实现方法详解
2018/12/21 Python
python制作mysql数据迁移脚本
2019/01/01 Python
python钉钉机器人运维脚本监控实例
2019/02/20 Python
Pycharm修改python路径过程图解
2020/05/22 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
美国最大的烧烤架和户外生活用品专业零售商:Barbeques Galore
2021/01/09 全球购物
几个SQL的面试题
2014/03/08 面试题
DataReader和DataSet的异同
2014/12/31 面试题
助人为乐表扬信范文
2014/01/14 职场文书
高三高考决心书
2014/03/11 职场文书
论文评语大全
2014/04/29 职场文书