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利用matplotlib库绘制饼图的方法示例
Dec 18 Python
PyQT实现多窗口切换
Apr 20 Python
windows下添加Python环境变量的方法汇总
May 14 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
python调用Matplotlib绘制分布点并且添加标签
May 31 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
pandas.cut具体使用总结
Jun 24 Python
python编写计算器功能
Oct 25 Python
python中entry用法讲解
Dec 04 Python
Python OpenGL基本配置方式
May 20 Python
使用scrapy实现增量式爬取方式
Jun 21 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
php 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
浅析Yii2中GridView常见操作
2016/04/22 PHP
golang 调用 php7详解及实例
2017/01/04 PHP
Thinkphp5.0框架视图view的模板布局用法分析
2019/10/12 PHP
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
js控制input输入字符解析
2013/12/27 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
2016/04/11 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
JavaScript实现解析INI文件内容的方法
2016/11/17 Javascript
EasyUI折叠表格层次显示detailview详解及实例
2016/12/28 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
对 Vue-Router 进行单元测试的方法
2018/11/05 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
javascript将16进制的字符串转换为10进制整数hex
2020/03/05 Javascript
JavaScript交换变量常用4种方法解析
2020/09/02 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
Python3.5 创建文件的简单实例
2018/04/26 Python
Python定时任务sched模块用法示例
2018/07/16 Python
TensorFlow学习之分布式的TensorFlow运行环境
2020/02/05 Python
解决django无法访问本地static文件(js,css,img)网页里js,cs都加载不了
2020/04/07 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
中国宠物用品商城:E宠商城
2016/08/27 全球购物
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
个人找工作求职简历的自我评价
2013/10/20 职场文书
药学专业大专生的自我评价
2013/12/12 职场文书
简历的个人自我评价范文
2014/01/03 职场文书
优秀班集体先进事迹材料
2014/05/28 职场文书
三方股份合作协议书
2014/10/13 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书