python第三方网页解析器 lxml 扩展库与 xpath 的使用方法


Posted in Python onApril 06, 2021

今天说的则是使用另外一种扩展库 lxml 来对网页完成解析。同样的,lxml 库能完成对 html、xml 格式的文件解析,并且能够用来解析大型的文档、解析速度也是相对比较快的。

要掌握 lxml 的使用,就需要掌握掌握 xpath 的使用方法,因为 lxml 扩展库就是基于 xpath 的,所以这一章的重点主要还是对 xpath 语法使用的说明。

1、导入 lxml 扩展库、并创建对象

# -*- coding: UTF-8 -*-

# 从 lxml 导入 etree
from lxml import etree

# 首先获取到网页下载器已经下载到的网页源代码
# 这里直接取官方的案例
html_doc = """
<html><head><title>The Dormouse's story</title></head>
<body>
<p class="title"><b>The Dormouse's story</b></p>

<p class="story">Once upon a time there were three little sisters; and their names were
<a href="http://example.com/elsie" rel="external nofollow" class="sister" id="link1">Elsie</a>,
<a href="http://example.com/lacie" rel="external nofollow" class="sister" id="link2">Lacie</a> and
<a href="http://example.com/tillie" rel="external nofollow" class="sister" id="link3">Tillie</a>;
and they lived at the bottom of a well.</p>

<p class="story">...</p>
"""

# 初始化网页下载器的 html_doc 字符串,返回一个 lxml 的对象
html = etree.HTML(html_doc)

2、使用 xpath 语法提取网页元素

按照节点的方式获取元素

# xpath() 使用标签节点的方式获取元素
print html.xpath('/html/body/p')
# [<Element p at 0x2ebc908>, <Element p at 0x2ebc8c8>, <Element p at 0x2eb9a48>]
print html.xpath('/html')
# [<Element html at 0x34bc948>]
# 在当前节点的子孙节点中查找 a 节点
print html.xpath('//a')
# 在当前节点的子节点中查找 html 节点
print html.xpath('/html')

按照筛选的方式获取元素

'''
根据单一属性获取元素
'''
# 获取子孙节点中,属性 class=bro 的 a 标签
print html.xpath('//a[@class="bro"]')

# 获取子孙节点中,属性 id=link3 的 a 标签
print html.xpath('//a[@id="link3"]')

'''
根据多个属性获取元素
'''
# 获取class属性等于sister,并且id等于link3的a标签
print html.xpath('//a[contains(@class,"sister") and contains(@id,"link1")]')

# 获取class属性等于bro,或者id等于link1的a标签
print html.xpath('//a[contains(@class,"bro") or contains(@id,"link1")]')

# 使用 last() 函数,获取子孙代的a标签的最后一个a标签
print html.xpath('//a[last()]')
# 使用 1 函数,获取子孙代的a标签的第一个a标签
print html.xpath('//a[1]')
# 标签筛选,position()获取子孙代的a标签的前两个a标签
print html.xpath('//a[position() < 3]')

'''
使用计算的方式,获取多个元素
'''
# 标签筛选,position()获取子孙代的a标签的第一个与第三个标签
# 可以使用的计算表达式:>、<、=、>=、<=、+、-、and、or
print html.xpath('//a[position() = 1 or position() = 3]')

获取元素的属性与文本

'''
使用@获取属性值,使用text() 获取标签文本
'''
# 获取属性值
print html.xpath('//a[position() = 1]/@class')
# ['sister']
# 获取标签的文本值
print html.xpath('//a[position() = 1]/text()')

到此这篇关于python 网页解析器掌握第三方 lxml 扩展库与 xpath 的使用方法的文章就介绍到这了,更多相关python lxml 扩展库与 xpath内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 Python
Python 获得13位unix时间戳的方法
Oct 20 Python
Python探索之pLSA实现代码
Oct 25 Python
Python操作Redis之设置key的过期时间实例代码
Jan 25 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
Nov 29 Python
python3 正则表达式基础廖雪峰
Mar 25 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
Python编写memcached启动脚本代码实例
Aug 14 Python
python 实现倒计时功能(gui界面)
Nov 11 Python
Python用摘要算法生成token及检验token的示例代码
Dec 01 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 Python
python删除csv文件的行列
Apr 06 #Python
python使用pygame创建精灵Sprite
python 逐步回归算法
python 通过使用Yolact训练数据集
python生成随机数、随机字符、随机字符串
Apr 06 #Python
Django项目配置Memcached和Redis, 缓存选择哪个更有优势
Apr 06 #Python
PySwarms(Python粒子群优化工具包)的使用:GlobalBestPSO例子解析
You might like
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
javascript随机将第一个dom中的图片添加到第二个div中示例
2013/10/08 Javascript
javascript中普通函数的使用介绍
2013/12/19 Javascript
jquery基础教程之deferred对象使用方法
2014/01/22 Javascript
JavaScript实现的一个倒计时的类
2015/03/12 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
webpack4.0打包优化策略整理小结
2018/03/30 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
今天,小程序正式支持 SVG
2019/04/20 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
python数字图像处理之高级形态学处理
2018/04/27 Python
python文件写入write()的操作
2019/05/14 Python
python3使用GUI统计代码量
2019/09/18 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
html5+css3之CSS中的布局与Header的实现
2014/11/21 HTML / CSS
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
美国瑜伽服装和装备购物网站:Mukha Yoga
2019/02/22 全球购物
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
初中生自我评价
2014/02/01 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
团队精神的演讲稿
2014/05/14 职场文书
人事任命书格式
2014/06/05 职场文书
党员目标管理责任书
2014/07/25 职场文书
教师职位说明书
2014/07/29 职场文书
2015年端午节活动方案
2015/05/05 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
何时使用Map来代替普通的JS对象
2021/04/29 Javascript
如何获取numpy array前N个最大值
2021/05/14 Python
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang