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 相关文章推荐
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
python万年历实现代码 含运行结果
May 20 Python
python登录并爬取淘宝信息代码示例
Dec 09 Python
Python+OpenCV实现车牌字符分割和识别
Mar 31 Python
用python写测试数据文件过程解析
Sep 25 Python
pycharm显示远程图片的实现
Nov 04 Python
numpy ndarray 按条件筛选数组,关联筛选的例子
Nov 26 Python
python字符串下标与切片及使用方法
Feb 13 Python
python的Jenkins接口调用方式
May 12 Python
python pymysql链接数据库查询结果转为Dataframe实例
Jun 05 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 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的中使用非缓冲模式查询数据库的方法
2017/02/05 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
JMenuTab简单使用说明
2008/03/13 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
jquery $.each() 使用小探
2013/08/23 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
JavaScript使用concat连接数组的方法
2015/04/06 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
在其他地方你学不到的jQuery小贴士和技巧(欢迎收藏)
2016/01/20 Javascript
javascript设计模式之策略模式学习笔记
2017/02/15 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
OpenLayers3实现地图鹰眼以及地图比例尺的添加
2020/09/25 Javascript
Python 字典与字符串的互转实例
2017/01/13 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
Python控制键盘鼠标pynput的详细用法
2019/01/28 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
python中for in的用法详解
2020/04/17 Python
Python实现一个优先级队列的方法
2020/07/31 Python
浅析关于Keras的安装(pycharm)和初步理解
2020/10/23 Python
CSS3 制作绽放的莲花采用效果叠加实现
2013/01/31 HTML / CSS
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
波兰运动鞋网上商店:Distance.pl
2020/07/30 全球购物
回门宴父母答谢词
2014/01/26 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
后备干部培训方案
2014/05/22 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
毕业设计工作总结
2015/08/14 职场文书
如何用JS实现简单的数据监听
2021/05/06 Javascript
Mysql数据库值的添加、修改、删除及清空操作实例
2021/06/20 MySQL
不想升级Win11?教你彻底锁定老版Windows系统的方法(附下载地址)
2022/09/23 数码科技