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:[<ul>]

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

oj("li")

        运行结果2:[<li>, <li#NO.1>, <li>, <li.Music>, <li.Movie>, <li.Music>, <li.Music>, <li.Movie>, <li.animation>, <li>]

        代码示例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() 相关的函数是删除符合条件的所有元素。

更多推荐