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 24 Python
Python中如何获取类属性的列表
Dec 26 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
python 重定向获取真实url的方法
May 11 Python
Python机器学习库scikit-learn安装与基本使用教程
Jun 25 Python
Python之inspect模块实现获取加载模块路径的方法
Oct 16 Python
python实现将字符串中的数字提取出来然后求和
Apr 02 Python
anaconda3安装及jupyter环境配置全教程
Aug 24 Python
Django中template for如何使用方法
Jan 31 Python
解决jupyter notebook图片显示模糊和保存清晰图片的操作
Apr 24 Python
详解python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
Apr 25 Python
端午节将至,用Python爬取粽子数据并可视化,看看网友喜欢哪种粽子吧!
Jun 11 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 单引号与双引号的区别
2009/11/24 PHP
PHP调用Webservice实例代码
2011/07/29 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
如何打开php的gd2库
2017/02/09 PHP
php基于SQLite实现的分页功能示例
2017/06/21 PHP
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
js按条件生成随机json:randomjson实现方法
2017/04/07 Javascript
深入浅析Vue全局组件与局部组件的区别
2018/06/15 Javascript
微信小程序支付前端源码
2018/08/29 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
React如何解决fetch跨域请求时session失效问题
2018/11/02 Javascript
VUE脚手架具体使用方法
2019/05/20 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
javascript中的相等操作符(==与===区别)
2019/12/21 Javascript
python中获得当前目录和上级目录的实现方法
2017/10/12 Python
Python探索之pLSA实现代码
2017/10/25 Python
在python win系统下 打开TXT文件的实例
2018/04/29 Python
对Python信号处理模块signal详解
2019/01/09 Python
python自动化测试之异常及日志操作实例分析
2019/11/09 Python
python飞机大战 pygame游戏创建快速入门详解
2019/12/17 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
Python调用Redis的示例代码
2020/11/24 Python
python 如何对logging日志封装
2020/12/02 Python
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
项目计划书范文
2014/01/09 职场文书
户外婚礼策划方案
2014/02/08 职场文书
教堂婚礼主持词
2014/03/14 职场文书
关于环保的标语
2014/06/13 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
七一活动主持词
2015/06/29 职场文书
pytorch 使用半精度模型部署的操作
2021/05/24 Python
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫