【实例讲解】Python利用parsel模块解析成xpath后的匹配语法

爬取DATA.GOV.HK数据集标题
部署运行你感兴趣的模型镜像

引入:

        python爬虫中经常会用到的解析模块之一就是parsel了,在parsel中,我们可以将请求后的字符串格式解析成xpath,进行内容的匹配,为了熟悉这其中xpath的语法,我们准备对DATA.GOV.HK中有关environment的公开数据集标题进行爬取。

一、【准备】导入数据所在页面的html内容

        明确我们的目标,在DATA.GOV.HK官网中,我们需要找到的是含有所有数据集标题的页面,刚好从它的顶栏中的data目录下面,我们可以点击进入datasets页面。

         进入datasets页面后,可以直接看到所有的数据集标题,在左侧有关于数据种类的筛选栏【Data Categories】,我们选择目录下方的【environment】之后,页面会自动刷新,新加载的页面就是本次爬虫所需要的html内容啦!

         很显然,我们的url地址也变成了https://data.gov.hk/en-datasets/category/environment?order=popularity&file-content=no

        悄咪咪说一句,这个链接也太友好了吧(dddd),想要别的种类数据的直接把category/后面的名称改掉就可以。

        导入html内容


url = 'https://data.gov.hk/en-datasets/category/environment?order=name&file-content=no'
#接收请求页面的html内容
rp = requests.get(url)

二、parsel模块的安装与使用

       1、安装 (win10系统)

pip install parsel

        2、使用

import parsel

                使用parsel解析html页面,创建一个parsel.Selector对象

sel = parsel.Selector(rp.text)

三、xpath匹配

        1、了解parsel中如何使用xpath匹配

 sel.xpath('xpath语法/text()').getall() #text()-获取节点下的文本内容,getall()-获取所有

        2、xpath语法 (xpath路径的写法)

表达式描述
nodename选取此节点的所有子节点
/从根节点选取
//可越多级,从当前节点匹配html中的所有符合的节点
.选取当前节点
..选取当前节点的父节点
@选取属性

        为了搞清楚表格中的表达式如何写出定位到所需的xpath路径,我们先来分析一下页面源代码。

         清楚看到,所有的datasets的简介,都被每一个div[@class='dataset-item']所生成,我们观察其中一个中它的子孙节点可以发现,在/h3[@class='dataset-heading']这里有一个子节点:<a>节点,恰好里面的文本就是了我们想要的标题名称,只要利用xpath定位到所有属性为的<a>节点即可。(小技巧:页面中h3节点只存在于属性为class='dataset-item'中时,我们便可以直接把根节点设置为h3)

         实现语句:

sel.xpath('//h3[@class="dataset-heading"]/a/text()').getall()

                分析以上语句中的xpath语法:

        //h3   #定位到所有标签名为h3的元素

        //h3[@class=''dataset-heading'']  #定位到所有标签名为h3且属性名为dataset-heading的元素,必须是双引号

        //h3[@class=''dataset-heading'']/a  #定位到所有标签名为h3且属性名为dataset-heading的元素的元素名为a的子节点

                这时肯定会有疑问了,为啥可以打个中括号??别急,我们来打印结果看看先。

        我们可以看到,实际上,xpath解析的结果会以列表的形式返回,这也就默许了xpath语法可以结合列表属性,对节点查找的内容进行修改。

路径写法结果
/父节点/子节点[1]选取属于父节点中子元素的第一个子元素
/父节点/子节点[last()]选取属于父节点中子元素的最后一个子元素
/父节点/子节点[position()]选取最前面的两个属于父节点的子元素
//元素名[@属性名]选取拥有该属性名的所有元素
//元素名[@属性名=“x”]选取拥有值为x的属性的所有元素   
/父节点/子元素名[某孙元素>u]/另一个孙元素选取所有某孙元素大于u的父节点下子元素的另一个孙元素

      

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 如何在 Python 中安装 Parsel 模块 要在 Python 中安装 `parsel` 模块,可以使用 `pip` 工具完。以下是具体方法: 通过运行以下命令来安装 `parsel` 模块: ```bash pip install parsel ``` 如果需要指定镜像源以加速下载过程,可参考如下方式设置豆瓣镜像源[^1]: ```bash pip install -i https://pypi.douban.com/simple/ parsel ``` 当遇到 `pip 不是内部命令` 的错误提示时,这通常是因为系统环境变量未配置正确或者 `pip` 本身存在问题[^3]。此时可以通过重新安装 Python 并勾选自动添加路径到环境变量的方式解决。 功安装后会显示类似于以下的信息: ``` Successfully installed parsel-<version> ``` #### 使用案例 一旦安装完毕,就可以利用模块解析 HTML 页面数据。下面是一个简单的例子展示如何加载并提取网页中的内容[^5]: ```python import requests import parsel url = 'http://example.com' response = requests.get(url) # 创建 Selector 对象用于后续操作 selector = parsel.Selector(response.text) # 提取标题标签的内容 (XPath 方法) title = selector.xpath('//title/text()').get() print(f'Title: {title}') # 或者采用 CSS 选择器获取首个 a 链接地址 link = selector.css('a::attr(href)').extract_first() print(f'First Link: {link}') ``` 上述脚本展示了两种不同的节点选取技术——XPath 和 CSS Selectors 来定位目标元素,并分别调用了 `.get()` 及其变体函数来取得单个或多个匹配项的结果。 --- ### 注意事项 对于某些特殊场景下可能还需要额外依赖库的支持,比如 Selenium 自动化浏览器驱动程序等,则需单独处理它们各自的安装流程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值