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实现简单温度转换的方法
Mar 13 Python
用Python编写一个简单的Lisp解释器的教程
Apr 03 Python
对python实现模板生成脚本的方法详解
Jan 30 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 Python
python连接mongodb集群方法详解
Feb 13 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
jupyter notebook 使用过程中python莫名崩溃的原因及解决方式
Apr 10 Python
python中类与对象之间的关系详解
Dec 16 Python
利用Python过滤相似文本的简单方法示例
Feb 03 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
【星际争霸1】人族1v7家ZBath
2020/03/04 星际争霸
PHP页面间传递参数实例代码
2008/06/05 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
PHP实现登陆表单提交CSRF及验证码
2017/01/24 PHP
基于jquery实现的移入页面上空文本框时,让它变为焦点,移出清除焦点
2011/07/26 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
使用Javascript监控前端相关数据的代码
2016/10/27 Javascript
Angular使用ng-messages与PHP进行表单数据验证
2016/12/28 Javascript
Ajax基础知识详解
2017/02/17 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
JavaScript实现快速排序的方法分析
2018/01/10 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
JavaScript实现背景自动切换小案例
2019/09/27 Javascript
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
python判断文件是否存在,不存在就创建一个的实例
2019/02/18 Python
python进阶之自定义可迭代的类
2019/08/20 Python
简单了解Python多态与属性运行原理
2020/06/15 Python
详解HTML5中的元素与元素
2015/08/17 HTML / CSS
购买大码女装:Lane Bryant
2016/09/07 全球购物
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
程序员经常用到的UNIX命令
2015/04/13 面试题
人力资源主管职责范本
2014/03/05 职场文书
cf战队收人广告词
2014/03/14 职场文书
2015年学雷锋活动总结
2015/02/06 职场文书
支教个人总结
2015/03/04 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
2015年女工委工作总结
2015/07/27 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
python 如何执行控制台命令与操作剪切板
2021/05/20 Python