爬虫解析库:pyquery的详细使用

文章目录

    • 1. 安装 pyquery
    • 2. 基本用法
    • 3. 选择元素
    • 4. 遍历元素
    • 5. 提取数据
    • 6. 修改元素
    • 7. 过滤元素
    • 8. 链式调用
    • 9. 结合 requests 使用
    • 10. 示例:抓取并解析网页
    • 11. 注意事项

pyquery 是一个类似于 jQuery 的 Python 库,用于解析 HTML 和 XML 文档。它提供了简洁的 API,可以方便地提取和操作网页中的数据。以下是 pyquery 的详细使用方法:

1. 安装 pyquery

首先,确保你已经安装了 pyquery。你可以通过以下命令安装:pip install pyquery

2. 基本用法

初始化:可以从字符串、文件或 URL 初始化 pyquery 对象:

from pyquery import PyQuery as pq# 从字符串初始化
html = """
<div id="container"><p class="item">Item 1</p><p class="item">Item 2</p><p class="item">Item 3</p>
</div>
"""
doc = pq(html)# 从文件初始化
doc = pq(filename='example.html')# 从 URL 初始化
doc = pq(url='https://example.com')

3. 选择元素

pyquery 支持类似 jQuery 的选择器语法。

通过标签名选择

# 选择所有 <p> 标签
p_tags = doc('p')
print(p_tags)

通过类名选择

# 选择所有 class 为 "item" 的元素
items = doc('.item')
print(items)

通过 ID 选择

# 选择 id 为 "container" 的元素
container = doc('#container')
print(container)

通过属性选择

# 选择所有具有 href 属性的 <a> 标签
links = doc('a[href]')
print(links)

4. 遍历元素

遍历子元素

# 遍历所有 class 为 "item" 的元素
for item in doc('.item').items():print(item.text())

获取父元素

# 获取第一个 class 为 "item" 的父元素
parent = doc('.item').parent()
print(parent)

获取兄弟元素

# 获取第一个 class 为 "item" 的兄弟元素
siblings = doc('.item').siblings()
print(siblings)

5. 提取数据

获取文本内容

# 获取第一个 class 为 "item" 的文本内容
text = doc('.item').eq(0).text()
print(text)

获取 HTML 内容

# 获取第一个 class 为 "item" 的 HTML 内容
html = doc('.item').eq(0).html()
print(html)

获取属性值

# 获取第一个 <a> 标签的 href 属性
href = doc('a').eq(0).attr('href')
print(href)

6. 修改元素

修改文本内容

# 修改第一个 class 为 "item" 的文本内容
doc('.item').eq(0).text('New Item')
print(doc)

修改 HTML 内容

# 修改第一个 class 为 "item" 的 HTML 内容
doc('.item').eq(0).html('<span>New Item</span>')
print(doc)

修改属性值

# 修改第一个 <a> 标签的 href 属性
doc('a').eq(0).attr('href', 'https://newexample.com')
print(doc)

7. 过滤元素

过滤符合条件的元素

# 过滤出 class 为 "item" 且包含 "2" 的元素
filtered_items = doc('.item').filter(lambda i: '2' in pq(this).text())
print(filtered_items)

排除不符合条件的元素

# 排除 class 为 "item" 且包含 "3" 的元素
filtered_items = doc('.item').not_(lambda i: '3' in pq(this).text())
print(filtered_items)

8. 链式调用

pyquery 支持链式调用,可以在一行代码中完成多个操作:

# 获取第一个 class 为 "item" 的父元素的 HTML 内容
result = doc('.item').eq(0).parent().html()
print(result)

9. 结合 requests 使用

pyquery 通常与 requests 库结合使用,用于抓取网页并解析:

import requests
from pyquery import PyQuery as pq# 抓取网页内容
response = requests.get('https://example.com')
html = response.text# 解析网页
doc = pq(html)# 提取数据
title = doc('title').text()
print(title)

10. 示例:抓取并解析网页

以下是一个完整的示例,展示如何使用 pyquery 抓取并解析网页数据:

import requests
from pyquery import PyQuery as pq# 抓取网页内容
url = 'https://example.com'
response = requests.get(url)
html = response.text# 解析网页
doc = pq(html)# 提取标题
title = doc('title').text()
print("网页标题:", title)# 提取所有链接
links = doc('a[href]')
for link in links.items():href = link.attr('href')text = link.text()print(f"链接文本: {text}, 链接地址: {href}")# 提取特定元素的内容
items = doc('.item')
for item in items.items():print("内容:", item.text())

11. 注意事项

编码问题:如果网页编码不是 UTF-8,可能需要手动指定编码。

动态内容:pyquery 只能解析静态 HTML,无法处理 JavaScript 动态加载的内容。如果需要处理动态内容,可以结合 Selenium 或 Pyppeteer 使用。

通过以上方法,你可以使用 pyquery 轻松解析和提取网页中的数据。它的语法简洁且功能强大,非常适合快速开发爬虫和数据采集工具。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

游戏引擎学习第120天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上次回顾&#xff1a;周期计数代码 我们正在进行一个项目的代码优化工作&#xff0c;目标是提高性能。当前正在优化某个特定的代码片段&#xff0c;已经将其执行周期减少到48个周期。为了实现这一目标&#xff0c;我们设计了一个…

大语言模型微调的公开JSON数据

大语言模型微调的公开JSON数据 以下是一些可用于大语言模型微调的公开JSON数据及地址: EmoLLM数据集 介绍:EmoLLM是一系列能够支持理解用户、帮助用户心理健康辅导链路的心理健康大模型,其开源了数据集、微调方法、训练方法及脚本等。数据集按用处分为general和role-play两种…

20分钟 Bash 上手指南

文章目录 bash 概念与学习目的第一个 bash 脚本bash 语法变量的使用位置参数管道符号&#xff08;过滤条件&#xff09;重定向符号条件测试命令条件语句case 条件分支Arrayfor 循环函数exit 关键字 bash 脚本记录历史命令查询文件分发内容 bash 概念与学习目的 bash&#xff0…

《Python实战进阶》专栏 No.3:Django 项目结构解析与入门DEMO

《Python实战进阶》专栏 第3集&#xff1a;Django 项目结构解析与入门DEMO 在本集中&#xff0c;我们将深入探讨 Django 的项目结构&#xff0c;并实际配置并运行一个入门DEMO博客网站&#xff0c;帮助你在 Web 开发中更高效地使用 Django。Django 是一个功能强大的 Python Web…

Spring Boot 应用(官网文档解读)

Spring Boot 启动方式 SpringApplication.run(MyApplication.class, args); Spring Boot 故障分析器 在Spring Boot 项目启动发生错误的时候&#xff0c;我们通常可以看到上面的内容&#xff0c;即 APPLICATION FAILED TO START&#xff0c;以及后面的错误描述。这个功能是通过…

win32汇编环境,对话框中使用菜单示例三

;运行效果 ;win32汇编环境,对话框中使用菜单示例三 ;鼠标点击右键时&#xff0c;弹出菜单的功能 ;直接抄进RadAsm可编译运行。重要部分加备注。 ;下面为asm文件 ;>>>>>>>>>>>>>>>>>>>>>>>>>>&g…

stm32-电源控制

STM32 的 PWR&#xff08;Power Control&#xff09;外设 是用于管理微控制器电源模式和外设电源控制的模块。通过 PWR 外设&#xff0c;可以实现低功耗模式、电压调节、备份域控制等功能&#xff0c;从而优化系统的功耗和性能。 stm32内部电源框图 电源区域 VDD 供电区&#x…

云计算及其他计算

云计算知识思维导图&#xff1a;https://kdocs.cn/l/cpl2Kizx7IyC 云计算的核心判断标准通常基于美国国家标准与技术研究院&#xff08;NIST&#xff09;的定义&#xff0c;并结合实际应用场景。以下是判断一个服务是否为云计算的关键标准&#xff0c;以及对应的服务类型&#…

mysql之B+ 树索引 (InnoDB 存储引擎)机制

b树索引机制 B 树索引 (InnoDB 存储引擎)机制**引言&#xff1a;****1. 数据页结构与查找**2. 索引的引入**3. InnoDB 的 B 树索引****4. InnoDB B 树索引的注意事项****5. MyISAM 的索引方案 (选读&#xff0c;与 InnoDB 做对比)****6. MySQL 中创建和删除索引的语句** **B 树…

量子计算驱动的金融衍生品定价革命:突破传统蒙特卡洛模拟的性能边界

引言&#xff1a;金融计算的算力困局 某国际投行采用128量子位处理器对亚洲期权组合定价时&#xff0c;其量子振幅估计算法在2.7秒内完成传统GPU集群需要68小时的计算任务。在蒙特卡洛路径模拟实验中&#xff0c;量子随机游走算法将10,000维衍生品的价格收敛速度提升4个数量级…

Web刷题之PolarDN(中等)

1.到底给不给flag呢 代码审计 一道典型的php变量覆盖漏洞 相关知识 什么是变量覆盖漏洞 自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 经常导致变量覆盖漏洞场景有&#xff1a;$$使用不当&#xff0c;extract()函数使用不当&#xff0c;parse_str()函数使用不当&…

ShenNiusModularity项目源码学习(12:ShenNius.Common项目分析)

ShenNius.Common项目中主要定义功能性的辅助函数类及通用类&#xff0c;供MVC模式、前后端分离模式下的后台服务使用&#xff0c;以提高编程效率。   ApiResult文件内的ApiResult和ApiResult类定义了通用的数据返回格式&#xff0c;包括状态码、返回消息、返回数据等&#x…

OkHttp使用和源码分析学习(二)

流程及源码分析 OkHttpClient使用过程主要涉及到OkHttpClient、Request、Response、Call、Interceptor&#xff0c;具体参考OkHttp使用。OkHttp在设计时采用门面模式&#xff0c;将整个系统复杂性隐藏&#xff0c;子系统通过OkHttpClient客户端对外提供。 流程 创建 OkHttp…

架构师论文《论湖仓一体架构及其应用》

软考论文-系统架构设计师 摘要 作为某省级商业银行数据中台建设项目技术负责人&#xff0c;我在2020年主导完成了从传统数据仓库向湖仓一体架构的转型。针对日益增长的支付流水、用户行为埋点及信贷审核影像文件等多模态数据处理需求&#xff0c;原有系统存在存储成本激增、实…

政安晨的AI大模型训练实践 九 - 熟悉LLaMA Factory的详细参数含义-基本概念理解一下

政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff01; 小伙伴铁子们&#xff0c;上手先熟悉起来训练工具的每一个参数&#xff0c;很重要。 参照我…

【Rust中级教程】2.8. API设计原则之灵活性(flexible) Pt.4:显式析构函数的问题及3种解决方案

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 说句题外话&#xff0c;这篇文章一共5721个字&#xff0c;是我截至目前写的最长的一篇文章&a…

git 克隆及拉取github项目到本地微信开发者工具,微信开发者工具通过git commit、git push上传代码到github仓库

git 克隆及拉取github项目到本地微信开发者工具&#xff0c;微信开发者工具通过git commit、git push上传代码到github仓库 git 克隆及拉取github项目到本地 先在自己的用户文件夹新建一个项目文件夹&#xff0c;取名为项目名 例如这样 C:\Users\HP\yzj-再打开一个终端页面&…

gitlab初次登录为什么登不上去

今天又写了一次gitlab安装后&#xff0c;第一次登录的问题。 gitlab工作笔记_gitlab默认用户名密码-CSDN博客 因为又掉这个坑里了。 # 为什么第一次登录这么难&#xff1f; 第一是因为gitlab启动的时间很长&#xff0c;有时候以为装错了。 第二是初始密码&#xff0c;如果…

华为认证考试证书下载步骤(纸质+电子版)

华为考试证书可以通过官方渠道下载相应的电子证书&#xff0c;部分高级认证如HCIE还支持申请纸质证书。 一、华为电子版证书申请步骤如下&#xff1a; ①访问华为培训与认证网站 打开浏览器&#xff0c;登录华为培训与认证官方网站 ②登录个人账号 在网站首页&#xff0c;点…

【UCB CS 61B SP24】Lecture 11 - Inheritance 4: Iterators, Object Methods学习笔记

本文内容为集合&#xff08;Set&#xff09;的介绍与使用&#xff0c;并通过数组手动实现集合&#xff0c;接着介绍了迭代器&#xff0c;使用迭代器我们能够更方便地遍历集合中的元素。 1. Set 1.1 Set介绍与Java实现类的使用 集合&#xff08;Set&#xff09;是一种常见的数…