简介

PyQuery是Python中的HTML/XML解析库,其灵感来自于jQuery。它提供了一种更加Pythonic的方式来操作文档,使得解析和提取数据变得简单而高效。

安装

首先,确保你已经安装了PyQuery模块。你可以使用pip命令来安装:

1
pip install pyquery

基本用法

以下是使用PyQuery解析HTML文档的基本步骤:

  1. 导入PyQuery模块:

    1
    from pyquery import PyQuery as pq
  2. 创建PyQuery对象:

    1
    doc = pq(html_doc)

    其中,html_doc是你要解析的HTML文档。

  3. 使用PyQuery对象进行提取数据:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 选择元素
    element = doc('tag')

    # 获取元素文本
    text = element.text()

    # 获取元素属性
    attribute_value = element.attr('attribute')

    你还可以使用类似jQuery的选择器语法来选择元素、查找子元素、过滤元素等,非常灵活方便。

实例演示

假设我们想从一个网页中提取出所有的图片链接和它们的描述文字。下面是使用PyQuery模块实现的示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from pyquery import PyQuery as pq
import requests

header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 "
"Safari/537.36 Edg/120.0.0.0"}

# 发送HTTP请求,获取网页内容
response = requests.get('https://book.douban.com/', headers=header)
with open("test.html", 'w', encoding='utf-8') as file:
file.write(response.text)

# 创建PyQuery对象
doc = pq(filename="test.html", encoding='utf-8')

# 获取所有图片链接和描述文字
books = []
book_list = doc('.more-meta')

for item in book_list.items():
title = item('.title').text()
author = item('.author').text()
year = item('.year').text()
publisher = item('.publisher').text()
abstract = item('.abstract').text()
book_dict = {"title": title, "author": author, "year": year, "publisher": publisher, "abstract": abstract}
books.append(book_dict)

for book in books:
print(book)

# {'title': '散步:罗伯特·瓦尔泽中短篇小说集', 'author': '[瑞士]罗伯特·瓦尔泽', 'year': '2023-11', 'publisher': '广西师范大学出版社', 'abstract': '【编辑推荐】 ⭐现代德语文学奠基人罗伯特·瓦尔泽中短篇小说集,精心编选,全新呈现! 他被誉为 “错过了时间的散步者”“细微之处的洞见者”“命运如雪的诗人”; 他是被埋没的天才作家,一生坚持不懈地为小人物著书立传; 他与穆齐尔、卡夫卡齐名,影响深远,被追认为现代德语文学奠基人。 罗伯特·瓦尔泽——“柏林三部曲”+精选故事集,德语直译,全新译本携手出版! ...'}
# {'title': '女人味的昨天、今天和明天:宫本百合子随笔集', 'author': '[日]宫本百合子', 'year': '2023-11', 'publisher': '贵州人民出版社', 'abstract': '亚洲女性主义先驱,近百年前坚决抵制男凝 “日本的波伏娃”,东亚版《第二性》 刨根问底“女人味”的前世今生,重走女性主义来时路 为古今东西被曲解、被规训的女人们正名 🌊 编辑推荐: 阻碍女性的,正是被创造出来的“女人味” 《伊利亚特》《蒙娜丽莎》《傲慢与偏见》《源氏物语》《我是猫》…… 女人是如何被塑造的,她们的觉醒又是如何一再被打断的? “我们”不再是观...'}
# {'title': '拉莫莱特之吻:有关文化史的思考', 'author': '(美) 罗伯特·达恩顿', 'year': '2024-1', 'publisher': '上海教育出版社', 'abstract': '想象怎么能是历史呢? 历史学家要进入已逝的世界,光靠方法理论那一套是不行的,还需要大胆想象。 本书有四个目的:第一,是要显示过去如何作为暗流存在于当下;第二,是要通过个案来分析媒体的作用;第三,借本书的写作过程来昭示媒体研究中的历史向度;第四,在这些讨论的基础上探讨宏观历史以及与历史相关的其他人文领域。'}
# {'title': '国家与学术的地方互动:四川大学国立化进程(1925-1939)(修订本)', 'author': '王东杰', 'year': '2023-11', 'publisher': '四川人民出版社', 'abstract': '本书是集中讨论中国现代大学与国家关系的优秀作品。本书最重要的特色是从“基层”入手,着重反映地方经验,从而深化了我们在中国民族主义问题上的认知和理解。从方法论上,书稿也体现出作者将历史学和人类学加以结合的跨学科研究的努力。此书立论具体而充实,背后所反映的问题极大。其取材丰富,不仅充分利用留存档案,更以报刊、文集等各类文献互相比证。其见识不受...'}

通过以上代码,我们成功地从网页中提取了所有图片链接和它们的描述文字。PyQuery模块的灵活性和强大功能使得数据提取变得十分便捷。