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使用win32com在百度空间插入html元素示例
Feb 20 Python
零基础写python爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
windows下python安装pip图文教程
May 25 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
python3 正则表达式基础廖雪峰
Mar 25 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
基于注解实现 SpringBoot 接口防刷的方法
Mar 02 Python
python如何做代码性能分析
Apr 26 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版自动生成文章摘要
2008/07/23 PHP
mac下使用brew配置环境的步骤分享
2011/05/23 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
2款PHP无限级分类实例代码
2015/11/11 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
php实现异步数据调用的方法
2015/12/24 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
PHP性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
用dtree实现树形菜单 dtree使用说明
2011/10/17 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
js实现日历的简单算法
2017/01/24 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
webpack学习笔记之代码分割和按需加载的实例详解
2017/07/20 Javascript
详解React Native网络请求fetch简单封装
2017/08/10 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
ES2020让代码更优美的运算符 (?.) (??)
2021/01/04 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
python+matplotlib演示电偶极子实例代码
2018/01/12 Python
Python 一句话生成字母表的方法
2019/01/02 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
2019/12/17 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
2020/03/23 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
小学生教师节演讲稿
2014/09/03 职场文书
2014年度培训工作总结
2014/11/27 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL