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功能键的读取方法
May 28 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
Jun 04 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
利用python计算时间差(返回天数)
Sep 07 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
python定义类self用法实例解析
Jan 22 Python
Python短信轰炸的代码
Mar 25 Python
基于python实现获取网页图片过程解析
May 11 Python
python+requests实现接口测试的完整步骤
Oct 27 Python
python内置进制转换函数的操作
Jun 02 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
成本8450万,票房仅2亿,口碑两极分化,又一部DC电影扑街了
2020/04/09 欧美动漫
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
2012/11/01 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
php实现session共享的实例方法
2019/09/19 PHP
列表内容的选择
2006/06/30 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
JavaScript移除数组内重复元素的方法
2015/03/18 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
AngularJS使用ng-repeat和ng-if实现数据的删选显示效果示例【适用于表单数据的显示】
2016/12/13 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
vue 粒子特效的示例代码
2017/09/19 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
React Form组件的实现封装杂谈
2018/05/07 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
Node.js API详解之 V8模块用法实例分析
2020/06/05 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
通过实例解析javascript Date对象属性及方法
2020/11/04 Javascript
Python常见数据结构详解
2014/07/24 Python
python使用any判断一个对象是否为空的方法
2014/11/19 Python
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
Python实现网站注册验证码生成类
2017/06/08 Python
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
使用PIL(Python-Imaging)反转图像的颜色方法
2019/01/24 Python
Python中如何导入类示例详解
2019/04/17 Python
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
网页美工求职信
2014/02/15 职场文书
新闻工作者先进事迹
2014/05/26 职场文书
商场客服专员岗位职责
2014/06/13 职场文书
志愿者个人总结
2015/03/03 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
初中军训感想
2015/08/07 职场文书