Python 爬虫 · PyQuery 模块基础

Python 学习第 33 天。


一、PyQuery 模块简介

PyQuery 是一个类似于 jQuery 的 Python 库,用于解析和操作 HTML 文档。它支持 CSS 选择器,提供了强大的 HTML 元素选择、属性操作和节点遍历功能,非常适合网页数据提取和爬虫开发。

二、PyQuery 的安装

在代码块中输入:

复制代码
pip install pyquery

运行结果末端部分出现以下文字,表明安装成功:

三、PyQuery 的使用

以以下 HTML 文档为例:

复制代码
html = """
<ul>
    <li>大脑在放电</li>
    <li id = "NO.1">1111111</li>
    <li style = "font-size:16px;">哈哈哈哈哈</li>
    <li class = "Music">《去北极忘记你》</li>
    <li class = "Movie">《解忧杂货铺》</li>
    <li class = "Music">《我会找到你》</li>
    <li class = "Music">《来自天堂的魔鬼》</li>
    <li class = "Movie">《送我上青云》</li>
    <li class = "animation"><a href = "https://baike.baidu.com/item/%e5%b0%8f%e7%8c%aa%e4%bd%a9%e5%a5%87/12343674">小猪佩奇</a></li>
    <li><a href = "https://pythonlang.cn/">Python</a></li>
</ul>
"""

1. 导入包

复制代码
from pyquery import PyQuery

2. 初始化对象

格式:变量名 = PyQuery(HTML文档所在的对象名)

复制代码
oj = PyQuery(html)

3. 获取标签

格式:初始化后的变量名("选择器"),选择器相关内容参考本专栏第 30 篇《Python 爬虫 · HTML 与 CSS 基础》中的 CSS 部分。

(1) 填入标签选择器

代码示例1:获取标签,当文档中该标签只有一个时,会将其存入列表中返回

复制代码
oj("ul")

运行结果1:\

代码示例2:获取标签,当文档中该标签有多个,也会将其作为元素存入列表中并返回。值得注意的是,如果标签中具有 ID 或 Class 属性,其在存储过程中就会被标注出来。

复制代码
oj("li")

运行结果2:\, \, \, \, \, \, \, \, \, \

代码示例3:获取标签中的具体内容

复制代码
result_1 = oj("ul")
print(result_1)

运行结果3:

代码示例4:

复制代码
result_2 = oj("li")
print(result_2)

运行结果4:

代码示例5:链式操作

复制代码
result_3 = oj("li")("a")
print(result_3)

运行结果5:

(2) 填入后代选择器

代码示例:

复制代码
result_4 = oj("li a")
print(result_4)

运行结果:

(3) 填入 ID 选择器

代码示例:

复制代码
result_5 = oj("#NO\.1")
print(result_5)

运行结果:<li id="NO.1">1111111</li>

注意:因为**.** 在 Python 中有特殊含义,常作为连接符连接某个对象与其子对象。所以,要将它当作字符串输出时,需要在前边加上转义字符 \

(4) 填入类选择器

代码示例:

复制代码
result_6 = oj(".Music")
print(result_6)

运行结果:

4. 常用函数

(1) .attr():

格式:初始化后的对象名("选择器").attr("属性名"),获取标签中的属性值

复制代码
result_7 = oj("li a").attr("href")
result_8 = oj("li").attr("style")
print(result_7)
print(result_8)

运行结果:

**注意:**如果选择器对应着多个标签,attr() 函数只会默认返回第一个标签中所含的该属性。

如果想返回全部的属性值,可以用 for 循环遍历:

复制代码
for i in oj("li"):
    print(oj(i).attr("style"))

运行结果:

(2) .text()

格式:初始化后的对象名("选择器").text(),获取标签中包含的所有内容文本

代码示例:

复制代码
result_9 = oj("li a").text()
result_10 = oj("li").text()
print(result_9)
print(result_10)

运行结果:

5. 增、改、删

(1) .atter()

格式:初始化后的对象名("用于定位的标签").after("""需要在定位标签后增加的标签及内容""")

代码示例:

复制代码
oj("li.Music").after("""<li>我是增加的第一个标签</li>""")
print(oj)

运行结果:

(2) .append()

格式:初始化后的对象名("用于定位的标签").append("""需要在定位标签中的内容后方增加的标签及内容""")

代码示例:

复制代码
oj("li#NO\.1").append("""<p>南波万</p>""")
print(oj)

运行结果:

(3) .attr()

格式1:初始化后的对象名("需要修改属性的标签").attr("需要修改的属性名", "修改后的属性值")

代码示例:

复制代码
oj("li.Music").attr("class", "TOP")
print(oj)

运行结果:

格式2:初始化后的对象名("需要增加属性的标签").attr("需要增加的属性名", "属性值")

代码示例:

复制代码
oj("li#NO\.1").attr("style", "font-size = 21px")
print(oj)

运行结果:

(4) .remove()

格式:初始化后的对象名("需要删除的标签").remove()

代码示例:

复制代码
oj("li.Movie").remove()
print(oj)

运行结果:

(5) .remove_attr()

格式:初始化后的对象名("需要删除的标签").remove_attr("属性名")

代码示例:

复制代码
oj("li#NO\.1").remove_attr("style")
print(oj)

运行结果:


总结规律:

1. 对于标签的定位可以用链式结构 对象名()(),甚至多个括号检索出来,也可以用后代标签的形式直接查询;

2. 获取文本内容用 text() 函数;

3, 与属性相关用 attr() 函数,且默认对查找到的第一个元素做操作;

4.after() 用于在标签外的后方增加标签,append() 用于在标签内内容的后方增加标签,且都默认对查找到的第一个标签进行操作;

5. remove() 相关的函数是删除符合条件的所有元素。

相关推荐
装不满的克莱因瓶1 小时前
【自动驾驶领域】学习 Cityscapes 数据集——城市街景语义理解的标准基准
人工智能·pytorch·python·深度学习·学习·机器学习·自动驾驶
吴卫斌2 小时前
波动率控制仓位系列(一):满仓轮动的“过山车”困境
大数据·python·股票·量化交易
如此这般英俊2 小时前
手搓Claude Code-第三章 permission
人工智能·python·语言模型
TE-茶叶蛋2 小时前
TF-IDF 与 BM25 深度解析:从理论到项目实战
python·django·tf-idf
xcbrand2 小时前
湖南VI设计公司排名
大数据·人工智能·python
lllsure3 小时前
【开源项目】Learn Claude Code
python·ai
数据知道4 小时前
指纹浏览器本地存储“孤岛化”:IndexedDB、LocalStorage、SessionStorage 的安全隔离
爬虫·安全·数据采集·指纹浏览器
青山如墨雨如画4 小时前
【北邮-无线通信中的人工智能】物理层技术中AI的应用实践:基于KNN的调制识别(1)理论基础
人工智能·python·机器学习·matlab·jupyter
MATLAB代码顾问4 小时前
Python Matplotlib数据可视化实战指南
python·信息可视化·matplotlib