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中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Python递归函数定义与用法示例
Jun 02 Python
python3实现随机数
Jun 25 Python
Python3之手动创建迭代器的实例代码
May 22 Python
Python学习笔记之文件的读写操作实例分析
Aug 07 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
Mar 18 Python
对Matlab中共轭、转置和共轭装置的区别说明
May 11 Python
关于matplotlib-legend 位置属性 loc 使用说明
May 16 Python
python如何求圆的面积
Jul 01 Python
python Selenium 库的使用技巧
Oct 16 Python
Python可视化神器pyecharts之绘制地理图表练习
Jul 07 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抓取页面的几种方法详解
2013/06/17 PHP
codeigniter自带数据库类使用方法说明
2014/03/25 PHP
php解决约瑟夫环算法实例分析
2019/09/30 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
2013/04/23 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
2014/05/05 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
BootStrap Progressbar 实现大文件上传的进度条的实例代码
2016/06/27 Javascript
Vue表单实例代码
2016/09/05 Javascript
Easyui笔记2:实现datagrid多行删除的示例代码
2017/01/14 Javascript
Javascript前端经典的面试题及答案
2017/03/14 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
浅谈vue父子组件怎么传值
2018/07/21 Javascript
js模拟实现百度搜索
2020/06/28 Javascript
Python模拟脉冲星伪信号频率实例代码
2018/01/03 Python
Python Json模块中dumps、loads、dump、load函数介绍
2018/05/15 Python
python实现比较文件内容异同
2018/06/22 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
python文件转为exe文件的方法及用法详解
2019/07/08 Python
Pandas DataFrame中的tuple元素遍历的实现
2019/10/23 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
PyQt5结合matplotlib绘图的实现示例
2020/09/15 Python
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
新员工欢迎词
2014/01/12 职场文书
2014端午节活动策划方案
2014/01/27 职场文书
最新奶茶店创业计划书范文
2014/02/08 职场文书
公开服务承诺制度
2014/03/26 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
离职证明格式样本
2015/06/12 职场文书
小学美术教学反思
2016/02/17 职场文书