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通过正则表达式选取callback的方法
Jul 18 Python
Python程序退出方式小结
Dec 09 Python
python实现猜数字小游戏
Mar 24 Python
tensorflow使用神经网络实现mnist分类
Sep 08 Python
django settings.py 配置文件及介绍
Jul 15 Python
Python将主机名转换为IP地址的方法
Aug 14 Python
pytorch构建多模型实例
Jan 15 Python
python 成功引入包但无法正常调用的解决
Mar 09 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
让Django的BooleanField支持字符串形式的输入方式
May 20 Python
python 进制转换 int、bin、oct、hex的原理
Jan 13 Python
Python集合的基础操作
Nov 01 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实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
解决3.01版的jquery.form.js中文乱码问题的解决方法
2012/03/08 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
angular简介和其特点介绍
2015/01/29 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
值得分享的bootstrap table实例
2016/09/22 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
基于JavaScript表单脚本(详解)
2017/10/18 Javascript
AJAX在JQuery中的应用详解
2019/01/30 jQuery
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
python创建关联数组(字典)的方法
2015/05/04 Python
django基础之数据库操作方法(详解)
2017/05/24 Python
python使用TensorFlow进行图像处理的方法
2018/02/28 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
Pandas中DataFrame的分组/分割/合并的实现
2019/07/16 Python
浅谈Python_Openpyxl使用(最全总结)
2019/09/05 Python
Python气泡提示与标签的实现
2020/04/01 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
英国电器零售商:PRC Direct
2018/06/21 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
公司活动总结范文
2014/07/01 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
穆斯林的葬礼读书笔记
2015/06/26 职场文书
通讯稿格式及范文
2015/07/22 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
Opencv实现二维直方图的计算及绘制
2021/07/21 Python
Java如何实现通过键盘输入一个数组
2022/02/15 Java/Android
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers