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中集合类型(set)学习小结
Jan 28 Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
python中的装饰器详解
Apr 13 Python
星球大战与Python之间的那些事
Jan 07 Python
Python判断文件或文件夹是否存在的三种方法
Jul 27 Python
Pycharm设置去除显示的波浪线方法
Oct 28 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
pytorch自定义二值化网络层方式
Jan 07 Python
使用python-pptx包批量修改ppt格式的实现
Feb 14 Python
Pytorch 统计模型参数量的操作 param.numel()
May 13 Python
Python实战之OpenCV实现猫脸检测
Jun 26 Python
python基础之类方法和静态方法
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
免费的ip数据库淘宝IP地址库简介和PHP调用实例
2014/04/08 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
2015/03/19 PHP
php去掉文件前几行的方法
2015/07/29 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP命令Command模式用法实例分析
2018/08/08 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
win10下 php安装seaslog扩展的详细步骤
2020/12/04 PHP
cookie中的path与domain属性详解
2013/12/18 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
辨析JavaScript中的Undefined类型与null类型
2016/05/26 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
微信小程序 swiper组件详解及实例代码
2016/10/25 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
Vue 实现展开折叠效果的示例代码
2018/08/27 Javascript
vuex 实现getter值赋值给vue组件里的data示例
2019/11/05 Javascript
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
浅谈python抛出异常、自定义异常, 传递异常
2016/06/20 Python
Python爬虫获取图片并下载保存至本地的实例
2018/06/01 Python
python中的decorator的作用详解
2018/07/26 Python
Python中对数组集进行按行打乱shuffle的方法
2018/11/08 Python
IntelliJ IDEA安装运行python插件方法
2018/12/10 Python
python jenkins 打包构建代码的示例代码
2019/11/29 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
学生个人自我鉴定范文
2014/03/28 职场文书
大学课外活动总结
2014/07/09 职场文书
意向协议书
2015/01/27 职场文书
学校推普周活动总结
2015/05/07 职场文书
2015年加油站工作总结
2015/05/13 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
你会写报告?产品体验报告到底该怎么写?
2019/08/14 职场文书
七年级作文之下雨天
2019/12/23 职场文书
ORACLE数据库应用开发的三十个注意事项
2021/06/07 Oracle
KVM基础命令详解
2022/04/30 Servers