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生成pdf文件的方法
Aug 04 Python
一个计算身份证号码校验位的Python小程序
Aug 15 Python
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
Python中 Lambda表达式全面解析
Nov 28 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
Python测试人员需要掌握的知识
Feb 08 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
Python 实现平台类游戏添加跳跃功能
Mar 27 Python
Python如何解除一个装饰器
Aug 07 Python
python3中apply函数和lambda函数的使用详解
Feb 28 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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去除数组中重复的元素并按键名排序函数
2008/08/18 PHP
php格式化日期实例分析
2014/11/12 PHP
浅谈PHP正则中的捕获组与非捕获组
2016/07/18 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
mapper--图片热点区域高亮组件官方站点
2007/12/22 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
jquery ajax请求方式与提示用户正在处理请稍等
2014/09/01 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
vue学习笔记之指令v-text &amp;&amp; v-html &amp;&amp; v-bind详解
2017/05/12 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
简单实现js鼠标跟随效果
2020/08/02 Javascript
jQuery实现下拉菜单动态添加数据点击滑出收起其他功能
2018/06/14 jQuery
浅谈Vue组件及组件的注册方法
2018/08/24 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
2018/09/27 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
Python中的文件和目录操作实现代码
2011/03/13 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python 并发下载器实现方法示例
2019/11/22 Python
在matplotlib中改变figure的布局和大小实例
2020/04/23 Python
PIP和conda 更换国内安装源的方法步骤
2020/09/21 Python
jupyter notebook快速入门及使用详解
2020/11/13 Python
Django权限控制的使用
2021/01/07 Python
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
批评与自我批评材料
2014/02/15 职场文书
快递员岗位职责
2014/09/12 职场文书
运动会加油稿100字
2014/09/19 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
西柏坡观后感
2015/06/08 职场文书
观看《信仰》心得体会
2016/01/15 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
Python中Matplotlib的点、线形状、颜色以及绘制散点图
2022/04/07 Python