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实现的阳历转阴历(农历)算法
Apr 25 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
python+pandas生成指定日期和重采样的方法
Apr 11 Python
Python堆排序原理与实现方法详解
May 11 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
Python 中导入csv数据的三种方法
Nov 01 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
Aug 12 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
使用Python制作一个打字训练小工具
Oct 01 Python
python清空命令行方式
Jan 13 Python
详解Anaconda安装tensorflow报错问题解决方法
Nov 01 Python
Python使用protobuf序列化和反序列化的实现
May 19 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
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
基于jQuery制作迷你背词汇工具
2010/07/27 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
jquery跨域请求示例分享(jquery发送ajax请求)
2014/03/25 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
基于javascript实现页面加载loading效果
2020/09/15 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
vue实现仿淘宝结账页面实例代码
2017/11/08 Javascript
vue 中动态绑定class 和 style的方法代码详解
2018/06/01 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Python使用itchat模块实现简单的微信控制电脑功能示例
2019/08/26 Python
django rest framework使用django-filter用法
2020/07/15 Python
Python中用xlwt制作表格实例讲解
2020/11/05 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
销售心得体会
2014/01/02 职场文书
高中班主任评语大全
2014/04/25 职场文书
小学校本培训方案
2014/06/06 职场文书
不错的求职信范文
2014/07/20 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
寻找成龙观后感
2015/06/12 职场文书
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android