企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# PyQuery 教程 > 原文: [http://zetcode.com/python/pyquery/](http://zetcode.com/python/pyquery/) PyQuery 教程展示了如何在 Python 中对 XML 文档进行 jQuery 查询。 ## jQuery jQuery 是一个 JavaScript 库,用于处理 DOM。 使用 jQuery,我们可以查找,选择,遍历和操作 HTML 文档的各个部分。 ## PyQuery PyQuery 是一个 Python 库,具有与 jQuery 类似的 API。 它使用`lxml`模块进行快速的 XML 和 HTML 操作。 该 API 尽可能类似于 jQuery。 ## 安装 PyQuery 使用以下命令安装 PyQuery: ```py $ sudo pip3 install pyquery ``` 我们使用`pip3`命令安装 PyQuery 模块。 ## HTML 文件 在示例中,我们将使用以下 HTML 文件: `index.html` ```py <!DOCTYPE html> <html> <head> <title>Header</title> <meta charset="utf-8"> </head> <body> <h2>Operating systems</h2> <ul id="mylist" style="width:150px"> <li>Solaris</li> <li>FreeBSD</li> <li>Debian</li> <li>NetBSD</li> <li>Windows</li> </ul> </body> </html> ``` ## 简单的例子 在第一个示例中,我们使用 PyQuery 模块获取标头的文本。 `header.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq with open("index.html", "r") as f: contents = f.read() doc = pq(contents) text = doc("h2").text() print(text) ``` 该代码示例打印`h2`元素的文本。 ```py from pyquery import PyQuery as pq ``` 我们从`pyquery`模块导入`PyQuery`类。 `PyQuery`是从事工作的主要类。 ```py with open("index.html", "r") as f: contents = f.read() ``` 我们打开`index.html`文件并使用`read()`方法读取其内容。 ```py doc = pq(contents) ``` 创建了`PyQuery`对象; HTML 数据将传递给构造器。 ```py text = doc("h2").text() ``` 我们选择`h2`标签,并使用`text()`方法获取其文本。 ```py $ ./header.py Operating systems ``` 这是输出。 ## 文本和 HTML 方法 `text()`方法检索元素的文本,而`html()`方法检索元素的 HTML 数据。 `get_list.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq with open("index.html", "r") as f: contents = f.read() doc = pq(contents) text = doc("ul").text() print("\n".join(text.split())) text = doc("ul").html() print("\n".join(text.split())) ``` 我们获得`ul`元素的文本数据和 HTML 数据。 ```py $ ./get_list.py Solaris FreeBSD Debian NetBSD Windows <li>Solaris</li> <li>FreeBSD</li> <li>Debian</li> <li>NetBSD</li> <li>Windows</li> ``` 这是输出。 ## 属性 元素属性可以使用`attr()`方法检索。 `attributes.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq with open("index.html", "r") as f: contents = f.read() doc = pq(contents) tag = doc("ul") print(tag.attr("id")) print(tag.attr("style")) ``` 在代码示例中,我们检索并打印`ul`元素的两个属性:`id`和`style`。 ```py $ ./attributes.py mylist width:150px ``` 这是输出。 ## 网页抓取 请求是一个简单的 Python HTTP 库。 它提供了通过 HTTP 访问 Web 资源的方法。 `scraping.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq import requests as req resp = req.get("http://www.something.com") doc = pq(resp.text) title = doc('title').text() print(title) ``` 该示例检索一个简单网页的标题。 ```py resp = req.get("http://www.something.com") doc = pq(resp.text) ``` 我们获取页面的 HTML 数据。 ```py title = doc('title').text() print(title) ``` 我们检索其标题。 ```py $ ./scraping.py Something. ``` 这是输出。 ## 选择标签 选择器用于选择 HTML 文档中满足某些条件的元素。 条件可以是它们的名称,ID,类名称,属性或它们的组合。 `selecting.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq def print_item(self, item): print("Tag: {0}, Text: {1}".format(item.tag, item.text)) with open("index.html", "r") as f: contents = f.read() doc = pq(contents) first_li = doc("li:first") print(first_li.text()) last_li = doc("li:last") print(last_li.text()) odd_lis = doc("li:odd") odd_lis.each(print_item) ``` 该示例从 HTML 文档中选择各种`li`标签。 ```py def print_item(self, item): print("Tag: {0}, Text: {1}".format(item.tag, item.text)) ``` 在此函数中,我们打印标签名称及其文本。 ```py first_li = doc("li:first") print(first_li.text()) ``` 我们选择第一个`li`标签,并使用`text()`方法打印其内容。 ```py last_li = doc("li:last") print(last_li.text()) ``` 在这里,我们得到了最后的`li`标签。 ```py odd_lis = doc("li:odd") odd_lis.each(print_item) ``` 借助`each()`方法,我们将打印每个奇数`li`元素的标签及其内容。 ```py $ ./selecting.py Solaris Windows Tag: li, Text: FreeBSD Tag: li, Text: NetBSD ``` 这是输出。 ## 移除元素 `remove()`方法删除标签。 `removing.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq with open("index.html", "r") as f: contents = f.read() doc = pq(contents) removed_item = doc('li:last').remove() print(removed_item) print(doc) ``` 在示例中,我们删除了最后一个`li`标签。 ```py removed_item = doc('li:last').remove() ``` 我们选择最后一个`li`标签,然后用`remove()`删除它。 返回删除的元素。 ```py print(removed_item) print(doc) ``` 我们将打印已删除的项目和已删除元素的文档。 ```py $ ./removing.py <li>Windows</li> <html> <head> <title>Header</title> <meta charset="utf-8"/> </head> <body> <h2>Operating systems</h2> <ul id="mylist" style="width:150px"> <li>Solaris</li> <li>FreeBSD</li> <li>Debian</li> <li>NetBSD</li> </ul> </body> </html> ``` 这是输出。 ## `items`方法 `items()`方法允许迭代元素。 `iterate.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq with open("index.html", "r") as f: contents = f.read() doc = pq(contents) items = [item.text() for item in doc.items('li')] print(items) ``` 该示例迭代文档的`li`元素。 ```py items = [item.text() for item in doc.items('li')] ``` `items()`方法用于在列表推导式中创建`li`元素的 Python 列表。 ```py $ ./iterate.py ['Solaris', 'FreeBSD', 'Debian', 'NetBSD', 'Windows'] ``` 这是输出。 ## 附加和前置元素 `append()`方法在节点的末尾添加元素,`prepend()`方法在节点的末尾添加元素。 `append_prepend.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq with open("index.html", "r") as f: contents = f.read() doc = pq(contents) mylist = doc("#mylist") mylist.prepend("<li>DragonFly</li>") mylist.append("<li>OpenBSD</li>") print(mylist) ``` 该代码示例使用`prepend()`和`append()`方法插入两个`li`元素。 ## `filter`方法 `filter()`方法用于过滤元素。 `filtering.py` ```py #!/usr/bin/python3 from pyquery import PyQuery as pq with open("index.html", "r") as f: contents = f.read() doc = pq(contents) filtered = doc('li').filter(lambda i: pq(this).text().startswith(('F', 'D', 'N'))) print(filtered.text()) ``` 该示例显示了以`F`,`D`或`N`开头的操作系统。我们使用`filter()`方法和匿名函数。 ```py ./filtering.py FreeBSD Debian NetBSD ``` 这是输出。 在本教程中,我们使用了 python PyQuery 库。 您可能也对以下相关教程感兴趣: [jQuery 教程](/web/jquery), [Beautifulsoup 教程](/python/beautifulsoup), [Python 教程](/lang/python/), [Python FTP 教程](/python/ftp/),Python 列表推导, [OpenPyXL 教程](/articles/openpyxl/), [Python Requests 教程](/web/pythonrequests/)和 [Python CSV 教程](/python/csv/)。