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 MD5文件生成码
Jan 12 Python
python通过wxPython打开一个音频文件并播放的方法
Mar 25 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python实现的寻找前5个默尼森数算法示例
Mar 25 Python
Python爬虫包BeautifulSoup学习实例(五)
Jun 17 Python
python针对mysql数据库的连接、查询、更新、删除操作示例
Sep 11 Python
手把手教你Python yLab的绘制折线图的画法
Oct 23 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
Python多线程正确用法实例解析
May 30 Python
Django-celery-beat动态添加周期性任务实现过程解析
Nov 26 Python
基于PyQt5制作一个群发邮件工具
Apr 08 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内核之php in array
2015/11/10 PHP
Yii框架创建cronjob定时任务的方法分析
2017/05/23 PHP
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
js+html5实现侧滑页面效果
2017/07/15 Javascript
jQuery菜单实例(全选,反选,取消)
2017/08/28 jQuery
Node.js中读取TXT文件内容fs.readFile()用法
2018/10/10 Javascript
vue element-ui之怎么封装一个自己的组件的详解
2019/05/20 Javascript
剖析Python的Twisted框架的核心特性
2016/05/25 Python
django用户登录和注销的实现方法
2018/07/16 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
Python2 Selenium元素定位的实现(8种)
2019/02/25 Python
Python网络爬虫之爬取微博热搜
2019/04/18 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
Python Numpy中数据的常用保存与读取方法
2020/04/01 Python
python中return不返回值的问题解析
2020/07/22 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
大学军训感言
2014/01/10 职场文书
高一物理教学反思
2014/01/24 职场文书
新品发布会策划方案
2014/06/08 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
违纪开除通知书
2015/04/25 职场文书
员工工作表扬信
2015/05/05 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
JS数组去重详情
2021/11/07 Javascript