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 相关文章推荐
python3生成随机数实例
Oct 20 Python
浅谈python多线程和队列管理shell程序
Aug 04 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
python flask 多对多表查询功能
Jun 25 Python
python把数组中的数字每行打印3个并保存在文档中的方法
Jul 17 Python
pandas重新生成索引的方法
Nov 06 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
python pillow模块使用方法详解
Aug 30 Python
Python-numpy实现灰度图像的分块和合并方式
Jan 09 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
May 15 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 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里的$_GET数组介绍
2019/03/22 PHP
laravel实现一个上传图片的接口,并建立软链接,访问图片的方法
2019/10/12 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
js 图片缩放(按比例)控制代码
2009/05/27 Javascript
Javascript在IE或Firefox下获取鼠标位置的代码
2009/12/18 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
如何防止回车(enter)键提交表单
2014/05/11 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
js实现数字递增特效【仿支付宝我的财富】
2017/05/05 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
简单介绍Python中的readline()方法的使用
2015/05/24 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
Pycharm 设置默认解释器路径和编码格式的操作
2021/02/05 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
说一下Linux下有关用户和组管理的命令
2014/08/18 面试题
预备党员思想汇报范文
2014/01/11 职场文书
生物制药专业求职信
2014/03/11 职场文书
商业项目策划方案
2014/06/05 职场文书
党员公开承诺书2015
2015/01/21 职场文书
幼儿园小班教学反思
2016/03/03 职场文书
Python实现机器学习算法的分类
2021/06/03 Python
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记
Golang日志包的使用
2022/04/20 Golang