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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
Python定时器实例代码
Nov 01 Python
python3使用scrapy生成csv文件代码示例
Dec 28 Python
Python走楼梯问题解决方法示例
Jul 25 Python
Python异常处理知识点总结
Feb 18 Python
numpy下的flatten()函数用法详解
May 27 Python
Python StringIO及BytesIO包使用方法解析
Jun 15 Python
django restframework serializer 增加自定义字段操作
Jul 15 Python
python安装sklearn模块的方法详解
Nov 28 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
Python Django / Flask如何使用Elasticsearch
Apr 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
ip签名探针
2006/10/09 PHP
PHP完整的日历类(CLASS)
2006/11/27 PHP
php中FTP函数ftp_connect、ftp_login与ftp_chmod用法
2014/11/18 PHP
PHP数组函数array_multisort()用法实例分析
2016/04/02 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
在PHP中输出JS语句以及乱码问题的解决方案
2019/02/13 PHP
ext checkboxgroup 回填数据解决
2009/08/21 Javascript
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
jQuery 1.9.1源码分析系列(十五)之动画处理
2015/12/03 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
vue实现可视化可拖放的自定义表单的示例代码
2019/03/20 Javascript
实现一个 Vue 吸顶锚点组件方法
2019/07/10 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
[19:54]夜魇凡尔赛茶话会 第一期02:看图识人
2021/03/11 DOTA
Python群发邮件实例代码
2014/01/03 Python
python 文件操作删除某行的实例
2017/09/04 Python
django中的数据库迁移的实现
2020/03/16 Python
django 模版关闭转义方式
2020/05/14 Python
家长给学校的建议书
2014/05/15 职场文书
红色故事演讲稿
2014/05/22 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
六年级学生评语大全
2014/12/26 职场文书
接待员岗位职责
2015/02/13 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js