浅谈Python库之PyQuery

一、PyQuery的介绍

        PyQuery 是一个 Python 库,它提供了一种类似于 jQuery 的方式来解析和操作 HTML 文档。如果你熟悉 jQuery,那么使用 PyQuery 将会非常直观,因为它的 API 尽可能地模仿了 jQuery。

二、PyQuery的简单使用

PyQuery 安装

PyQuery 可以通过 Python 的包管理器 pip 进行安装。在命令行中输入以下命令即可安装 PyQuery:

pip install pyquery

确保你的系统中已经安装了 pip。如果 pip 不可用,你可能需要先安装 Python。

PyQuery 使用方法

基本使用

首先,你需要导入 PyQuery 库:

from pyquery import PyQuery as pq

然后,你可以加载一个 HTML 文档:

html = '<div><p>这是一个段落。</p></div>'
doc = pq(html)

现在,你可以使用类似于 jQuery 的选择器来查找元素:

paragraph = doc('p')  # 选择所有的 p 标签
print(paragraph.text())  # 输出:这是一个段落。

选择器

PyQuery 支持多种选择器,包括:

  • 标签选择器:doc('p') 选择所有的 p 标签。
  • 类选择器:doc('.classname') 选择所有具有 classname 类的元素。
  • ID 选择器:doc('#idname') 选择 ID 为 idname 的元素。

遍历

你可以使用 PyQuery 来遍历 HTML 元素:

for p in doc('p'):print(p.text())

属性操作

PyQuery 允许你获取和设置元素的属性:

# 获取属性
href = doc('a').attr('href')# 设置属性
doc('a').attr('href', 'http://example.com')

内容操作

你可以获取或设置元素的内容:

# 获取内容
content = doc('div').html()# 设置内容
doc('div').html('新的内容')

创建和删除元素

PyQuery 也支持创建新的元素和删除元素:

# 创建新元素
new_element = pq('<div>新元素</div>')# 删除元素
doc('p').remove()

事件处理

虽然 PyQuery 主要用于服务器端的 HTML 解析,但它也支持简单的事件处理:

def handle_click(event):print('点击事件')
doc('button').click(handle_click)

三、PyQuery的详细用法

1. 获取属性

提取到 PyQuery 类型的节点后,可以调用 attr 方法来获取属性:

from pyquery import PyQuery as pq
html = '''
<div class="wrap"><div id="container"><ul class="list"><li class="item-0">first item</li><li class="item-1"><a href="link2.html">second item</a></li><li class="item-0 active"><a href="link3.html"><span class="bold">third item</span></a></li></ul></div>
</div>
'''
doc = pq(html)
a = doc('.item-0.active a')
print(a.attr('href'))  # 输出: link3.html

2. 遍历获取所有的 a 节点的属性

from pyquery import PyQuery as pq
doc = pq(html)
lis = doc('li').items()
for li in lis:print(li, type(li))

3. 初始化 HTML 文件

初始化文件,只需要加个 filename 参数,指明文件路径即可:

# filename参数为html文件路径
test_html = pq(filename='test.html')
print(type(test_html))
print(test_html)

如果文件不是 HTML 文件,那么初始化的时候会自动加上 HTML 标签。

4. 初始化请求响应

我们可以把请求的网址内容初始化为 PyQuery 对象,只需要加个参数 url,将网址赋值给它即可:

response = pq(url='https://www.baidu.com')
print(type(response))
print(response)

5. 使用 CSS 选择器

PyQuery 里面 CSS 选择器的用法跟 jQuery 里面是一样的:

doc = pq(html)
print(doc('#container'))  # 获取 id 为 container 的标签
print(doc('.li2'))  # 使用 class 选择器

6. 使用伪类选择器

pseudo_doc = pq(html)
print(pseudo_doc('li:nth-child(2)'))  # 打印第二个 li 标签
print(pseudo_doc('li:first-child'))  # 打印第一个 li 标签
print(pseudo_doc('li:last-child'))  # 打印最后一个 li 标签

7. 查找标签

我们可以按照条件在 Pyquery 对象中查找符合条件的标签:

# 打印id为container的标签
print(doc.find('#container'))

8. 查找子标签

使用 children 方法可以查找某个标签的子标签:

container = doc.find('#container')
print(container.children())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/34825.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】Switch语句、循环语句(for、while、do...while)

Switch语句&#xff1a;针对某个表达式的值进行判断&#xff0c;从而决定执行哪一段代码 语法格式&#xff1a; switch(表达式){ case 目标值1: 执行语句1 break; case 目标值2: …

中建海龙:科技创新引领建筑业革新,铸就行业影响力

在建筑业这个古老而又充满活力的行业中&#xff0c;中建海龙科技有限公司&#xff08;以下简称“中建海龙”&#xff09;凭借其卓越的科技实力和一系列荣誉奖项&#xff0c;正逐步确立其在建筑工业化领域的领导地位&#xff0c;并对整个行业产生了深远影响。 中建海龙自成立以来…

【认证法规】安全隔离变压器

文章目录 定义反激电源变压器 定义 安全隔离变压器&#xff08;safety isolating transformer&#xff09;&#xff0c;通过至少相当于双重绝缘或加强绝缘的绝缘使输入绕组与输出绕组在电气上分开的变压器。这种变压器是为以安全特低电压向配电电路、电器或其它设备供电而设计…

引领素养教育行业,猿辅导素养课斩获“2024影响力教育品牌”奖项

近日&#xff0c;由教育界网、校长邦联合主办&#xff0c;鲸媒体、职教共创会协办的“第9届榜样教育年度盛典”评奖结果揭晓。据了解&#xff0c;此次评选共有近500家企业提交参评资料进行奖项角逐&#xff0c;历经教育界权威专家、资深教育从业者以及专业评审团队的多轮严格筛…

内网穿透 natapp安装与使用

前言 NATAPP是一款基于ngrok的内网穿透工具。以下是对NATAPP的详细概述&#xff1a; 基本概念 定义&#xff1a;内网穿透&#xff08;NAT穿透&#xff09;是一种技术&#xff0c;它允许具有特定源IP地址和端口号的数据包能够绕过NAT设备&#xff0c;从而被正确地路由到内网主机…

TiDB如何保证数据一致性

1. 分布式事务协议 TiDB 采用了类似 Google Percolator 的分布式事务协议来处理分布式事务。这个协议基于两阶段提交&#xff08;2PC&#xff09;的思想&#xff0c;但进行了优化和改进&#xff0c;以适应分布式环境的特殊需求。在 TiDB 中&#xff0c;当一个事务需要跨多个节…

高中数学:导数-在研究函数中的应用

文章目录 一、函数单调性解题步骤图像特征与导数值的关系 二、函数的极值与最大最小值1、函数的极值极值点的求法2、函数的最大最小值最大最小值求法函数大致图像的画法 一、函数单调性 例题 解题步骤 例题 图像特征与导数值的关系 二、函数的极值与最大最小值 1、函数的极…

OceanBase数据库使用 INSERT 语句违反唯一约束冲突解决办法及两者差异分析

当在OceanBase数据库上创建带有唯一性约束的表&#xff0c;在向表中插入唯一性约束的冲突的数据时会提示因违反唯一性约束报错&#xff0c;OceanBase在其官网上提供了两种解决策略&#xff0c;但其官网并未详细说明两种策略的差异&#xff0c;于是早上对两种策略进行一些测试&a…

【人工智能的深度分析与最新发展趋势】

人工智能的深度分析与最新发展趋势 引言 人工智能&#xff08;AI&#xff09;是现代科技的重要组成部分&#xff0c;它涉及模拟人类智能的算法和技术。随着计算能力的提升和数据量的激增&#xff0c;AI的应用正在迅速渗透到各个行业。本文将深入分析人工智能的概念、技术、应…

Spring Boot + MySQL 多线程查询与联表查询性能对比分析

Spring Boot MySQL: 多线程查询与联表查询性能对比分析 背景 在现代 Web 应用开发中&#xff0c;数据库性能是影响系统响应时间和用户体验的关键因素之一。随着业务需求的不断增长&#xff0c;单表查询和联表查询的效率问题日益凸显。特别是在 Spring Boot 项目中&#xff0…

Navicat 连接 SQL Server 详尽指南

Navicat 是一款功能强大的数据库管理工具&#xff0c;它提供了直观的图形界面&#xff0c;使用户能够轻松地管理和操作各种类型的数据库&#xff0c;包括 SQL Server。本文将详尽介绍如何使用 Navicat 连接到 SQL Server 数据库&#xff0c;包括安装设置、连接配置、常见问题排…

【多模型能力测试记录】ArgoDB分布式分析型数据库与图数据库StellarDB联合查询

前言 随着数据量的爆炸性增长和业务需求的日益复杂化&#xff0c;传统的单一模型数据库已经难以满足复杂多变的业务需求。尽管当前针对不同的数据类型&#xff0c;例如关系型数据、文档数据、图数据和时序数据业内提供了多种数据库以应对存储及处理需求&#xff0c;但是在实际…

Ansible自动化运维

1 ansible介绍和架构 1.1 什么是ansible ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible…

玩FPGA不乏味

玩FPGA不乏味 Hello&#xff0c;大家好&#xff0c;之前给大家分享了大约一百多个关于FPGA的开源项目&#xff0c;涉及PCIe、网络、RISC-V、视频编码等等&#xff0c;这次给大家带来的是不枯燥的娱乐项目&#xff0c;主要偏向老的游戏内核使用FPGA进行硬解&#xff0c;涉及的内…

工商业光伏系统踏勘、设计、施工全流程讲解

随着全球能源结构的转型和环保意识的提升&#xff0c;光伏发电作为一种清洁、可再生的能源形式&#xff0c;正越来越受到工商业领域的青睐。商场、学校、医院、各类工厂等地&#xff0c;安装光伏发电系统不仅能降低运营成本&#xff0c;还可以为企业树立良好的环保形象。 一、前…

mongo开启慢日志及常用命令行操作、数据备份

mongo开启慢日志及常用命令行操作、数据备份 1.常用命令行操作2.mongo备份3.通过命令临时开启慢日志记录4.通过修改配置开启慢日志记录 1.常用命令行操作 连接命令行 格式&#xff1a;mongo -u用户名 -p密码 --host 主机地址 --port 端口号 库名&#xff1b; 如&#xff1a;连…

Vue跨标签通讯(本地存储)(踩坑)

我司有一个需求【用户指引】 需求是根标签有一个用户指引总开关&#xff0c;可以控制页面所有的用户指引是否在页面进入后初始是否默认打开&#xff0c;但是有些页面会新开标签这就设计到跨标签通讯了 我采取的方案是本地存储 重点:首先本地存储在页面是同源(即域名协议端口三…

Scrapy解析JSON响应v

在 Scrapy 中解析 JSON 响应非常常见&#xff0c;特别是当目标网站的 API 返回 JSON 数据时。Scrapy 提供了一些工具和方法来轻松处理 JSON 响应。 1、问题背景 Scrapy中如何解析JSON响应&#xff1f; 有一只爬虫(点击查看源代码)&#xff0c;它可以完美地完成常规的HTML页面…

机器学习生物医学

Nature与Science重磅&#xff01;AI与生物医药迎来百年来最重磅进展&#xff01;https://mp.weixin.qq.com/s/Vw3Jm4vVKP14_UH2jqwsxA 第一天 机器学习及生物医学中应用简介 1. 机器学习及生物医学中应用简介 2. 机器学习基本概念介绍 3. 常用机器学习模型介绍&#xff0…

ISIS五

L1路由器的次优路径问题 路由渗透 可以打标签 等价路由上面下面都把骨干区域引入非骨干 强制ATT位不置位为1 attached-bit advertise never 在AR2上禁止ATT置位为1 在AR3没有禁止呀还是有默认路由 ISIS选路机制&#xff1a; L1的路由优于L2的路由 星号bit 叫DU-bit 知道…