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 相关文章推荐
python求列表交集的方法汇总
Nov 10 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
Python 如何访问外围作用域中的变量
Sep 11 Python
python 使用get_argument获取url query参数
Apr 28 Python
OpenCV2.3.1+Python2.7.3+Numpy等的配置解析
Jan 05 Python
python实现验证码识别功能
Jun 07 Python
django框架自定义用户表操作示例
Aug 07 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
Apr 06 Python
详解Python3序列赋值、序列解包
May 14 Python
一篇文章搞懂python的转义字符及用法
Sep 03 Python
Pycharm github配置实现过程图解
Oct 13 Python
Python脚本调试工具安装过程
Jan 11 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
用PHP和ACCESS写聊天室(八)
2006/10/09 PHP
Zend studio for eclipse中使php可以调用mysql相关函数的设置方法
2008/10/13 PHP
PHP中call_user_func_array()函数的用法演示
2012/02/05 PHP
Thinkphp模板中截取字符串函数简介
2014/06/17 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP读取文件的常见几种方法
2016/11/03 PHP
javascript学习(二)javascript常见问题总结
2013/01/02 Javascript
js中的布尔运算符使用介绍
2013/11/20 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
Bootstrap轮播插件使用代码
2016/10/11 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
Vue2.0 事件的广播与接收(观察者模式)
2018/03/14 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
vue基础之事件简写、事件对象、冒泡、默认行为、键盘事件实例分析
2019/03/11 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
[47:43]完美世界DOTA2联赛PWL S3 Magama vs GXR 第二场 12.19
2020/12/24 DOTA
一个基于flask的web应用诞生 用户注册功能开发(5)
2017/04/11 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
python实现可变变量名方法详解
2019/07/01 Python
解决Numpy中sum函数求和结果维度的问题
2019/12/06 Python
python str字符串转uuid实例
2020/03/03 Python
美国Max仓库:Max Warehouse
2020/05/31 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
计算机专业职业生涯规划范文
2014/01/19 职场文书
优秀教师主要事迹
2014/02/01 职场文书
个人投资计划书
2014/05/01 职场文书
地震慰问信
2015/02/14 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL