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笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
python在windows命令行下输出彩色文字的方法
Mar 19 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
python 编码规范整理
May 05 Python
python 3.6.4 安装配置方法图文教程
Sep 18 Python
在python里从协程返回一个值的示例
Feb 19 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
使用PyQt5实现图片查看器的示例代码
Apr 21 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
python3的pip路径在哪
Jun 23 Python
Python中的min及返回最小值索引的操作
May 10 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
论建造顺序的重要性
2020/03/04 星际争霸
如何将一个表单同时提交到两个地方处理
2006/10/09 PHP
PHP中的替代语法简介
2014/08/22 PHP
PHP实现查询手机归属地的方法详解
2017/04/28 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
音乐播放用的的几个函数
2006/09/07 Javascript
清空上传控件input file的值
2010/07/03 Javascript
加速IE的Javascript document输出的方法
2010/12/02 Javascript
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
Javascript函数的参数
2015/07/16 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
vue响应式更新机制及不使用框架实现简单的数据双向绑定问题
2019/06/27 Javascript
js前端对于大量数据的展示方式及处理方法
2020/12/02 Javascript
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
Python 12306抢火车票脚本
2018/02/07 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
python实现彩色图转换成灰度图
2019/01/15 Python
django query模块
2019/04/20 Python
python实现文件助手中查看微信撤回消息
2019/04/29 Python
numpy.random模块用法总结
2019/05/27 Python
英国最大的邮寄种子和植物公司:Thompson & Morgan
2017/09/21 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
什么是三层交换,说说和路由的区别在那里
2014/09/01 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
新闻编辑自荐信
2013/11/03 职场文书
高三霸气励志标语
2014/06/24 职场文书
2014年祖国生日寄语
2014/09/19 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
信仰观后感
2015/06/03 职场文书