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中的模块和包概念介绍
Apr 13 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
python中list列表的高级函数
May 17 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
Python基础教程之异常详解
Jan 10 Python
python实现剪切功能
Jan 23 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
Python GUI自动化实现绕过验证码登录
Jan 10 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
python链表类中获取元素实例方法
Feb 23 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
如何利用python创作字符画
Jun 25 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屏蔽蜘蛛访问代码及常用搜索引擎的HTTP_USER_AGENT
2013/03/06 PHP
CodeIgniter基本配置详细介绍
2013/11/12 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
Laydate时间组件在火狐浏览器下有多时间输入框时只能给第一个输入框赋值的解决方法
2016/08/18 Javascript
JS不完全国际化&amp;本地化手册 之 理论篇
2016/09/27 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
AngularJS路由删除#符号解决的办法
2017/09/28 Javascript
Vue 拦截器对token过期处理方法
2018/01/23 Javascript
JavaScript随机数的组合问题案例分析
2020/05/16 Javascript
谈谈node.js中的模块系统
2020/09/01 Javascript
[02:25]DOTA2英雄基础教程 虚空假面
2014/01/02 DOTA
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
python安装与使用redis的方法
2016/04/19 Python
Python基础教程之tcp socket编程详解及简单实例
2017/02/23 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
Python+OpenCV目标跟踪实现基本的运动检测
2018/07/10 Python
利用python将图片版PDF转文字版PDF
2019/05/03 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
2020/10/15 Python
Python项目打包成二进制的方法
2020/12/30 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
机电一体化毕业生求职信
2013/11/02 职场文书
高中军训感言800字
2014/03/05 职场文书
社团活动总结范文
2014/04/26 职场文书
2014第二批党员干部对照“四风”找差距检查材料思想汇报
2014/09/18 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
常住证明范本
2015/06/23 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
Spring Data JPA框架持久化存储数据到数据库
2022/04/28 Java/Android