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实现爬虫下载美女图片
Jul 14 Python
Python Sql数据库增删改查操作简单封装
Apr 18 Python
python中range()与xrange()用法分析
Sep 21 Python
Python如何生成树形图案
Jan 03 Python
python查看模块,对象的函数方法
Oct 16 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
python实现桌面气泡提示功能
Jul 29 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
Python操作Jira库常用方法解析
Apr 10 Python
通过实例解析python创建进程常用方法
Jun 19 Python
Pyinstaller打包Scrapy项目的实现步骤
Sep 22 Python
pytorch损失反向传播后梯度为none的问题
May 12 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
PHP 简单数组排序实现代码
2009/08/05 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
深入探究PHP的多进程编程方法
2015/08/18 PHP
javascript 语法基础 想学习js的朋友可以看看
2009/12/16 Javascript
Javascript的闭包详解
2014/12/26 Javascript
详解JavaScript中的客户端消息框架设计原理
2015/06/24 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
利用jQuery的动画函数animate实现豌豆发射效果
2016/08/28 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
2019/04/24 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
jQuery实现放大镜案例
2020/10/19 jQuery
9种python web 程序的部署方式小结
2014/06/30 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
Python 模拟购物车的实例讲解
2017/09/11 Python
python 统计一个列表当中的每一个元素出现了多少次的方法
2018/11/14 Python
Python Django 页面上展示固定的页码数实现代码
2019/08/21 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
python 实现rolling和apply函数的向下取值操作
2020/06/08 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
电子商务专业毕业生自荐书
2014/06/22 职场文书
党员自我剖析材料
2014/08/31 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
保密工作整改情况汇报
2014/11/06 职场文书
死亡赔偿协议书
2015/01/28 职场文书
2015年教师节慰问信
2015/03/23 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
MySQL 开窗函数
2022/02/15 MySQL