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 enumerate遍历数组示例应用
Sep 06 Python
python抓取某汽车网数据解析html存入excel示例
Dec 04 Python
Python+Pika+RabbitMQ环境部署及实现工作队列的实例教程
Jun 29 Python
浅谈flask中的before_request与after_request
Jan 20 Python
python通过tcp发送xml报文的方法
Dec 28 Python
Python中请不要再用re.compile了
Jun 30 Python
Python爬虫爬取Bilibili弹幕过程解析
Oct 10 Python
Python unittest框架操作实例解析
Apr 13 Python
在python里创建一个任务(Task)实例
Apr 25 Python
Python flask路由间传递变量实例详解
Jun 03 Python
Python如何将装饰器定义为类
Jul 30 Python
Python开发简易五子棋小游戏
May 02 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写的serv-u的web申请账号的程序
2006/10/09 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
PHP+Mysql无刷新问答评论系统(源码)
2016/12/20 PHP
PHP memcache在微信公众平台的应用方法示例
2017/09/13 PHP
PHP类与对象后期静态绑定操作实例详解
2018/12/20 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
jQuery Study Notes学习笔记 (二)
2010/08/04 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
jQuery网页版打砖块小游戏源码分享
2015/08/20 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
2017/03/15 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
jQuery实现表格冻结顶栏效果
2017/08/20 jQuery
JavaScript实现百度搜索框效果
2020/03/26 Javascript
vue-cli与webpack处理静态资源的方法及webpack打包的坑
2018/05/15 Javascript
Vue.js特性Scoped Slots的浅析
2019/02/20 Javascript
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python网站验证码识别
2016/01/25 Python
python制作企业邮箱的爆破脚本
2016/10/05 Python
python中的随机函数小结
2018/01/27 Python
Python实现批量修改图片格式和大小的方法【opencv库与PIL库】
2018/12/03 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
python实现弹窗祝福效果
2019/04/07 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
历史学专业个人的自我评价
2013/10/13 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
党员教师工作决心书
2014/03/13 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
民间借贷借条范本
2015/05/25 职场文书
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL
MySQL如何使备份得数据保持一致
2022/05/02 MySQL