PyQuery 教程展示了如何在 Python 中对 XML 文档进行 jQuery 查询。
jQuery
jQuery 是一个 JavaScript 库,用于处理 DOM。 使用 jQuery,我们可以查找,选择,遍历和操作 HTML 文档的各个部分。
PyQuery
PyQuery 是一个 Python 库,具有与 jQuery 类似的 API。 它使用lxml模块进行快速的 XML 和 HTML 操作。 该 API 尽可能类似于 jQuery。
安装 PyQuery
使用以下命令安装 PyQuery:
$ sudo pip3 install pyquery
我们使用pip3命令安装 PyQuery 模块。
HTML 文件
在示例中,我们将使用以下 HTML 文件:
index.html
<!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
#!/usr/bin/python3from pyquery import PyQuery as pqwith open("index.html", "r") as f:contents = f.read()doc = pq(contents)text = doc("h2").text()print(text)
该代码示例打印h2元素的文本。
from pyquery import PyQuery as pq
我们从pyquery模块导入PyQuery类。 PyQuery是从事工作的主要类。
with open("index.html", "r") as f:contents = f.read()
我们打开index.html文件并使用read()方法读取其内容。
doc = pq(contents)
创建了PyQuery对象; HTML 数据将传递给构造器。
text = doc("h2").text()
我们选择h2标签,并使用text()方法获取其文本。
$ ./header.pyOperating systems
这是输出。
文本和 HTML 方法
text()方法检索元素的文本,而html()方法检索元素的 HTML 数据。
get_list.py
#!/usr/bin/python3from pyquery import PyQuery as pqwith 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 数据。
$ ./get_list.pySolarisFreeBSDDebianNetBSDWindows<li>Solaris</li><li>FreeBSD</li><li>Debian</li><li>NetBSD</li><li>Windows</li>
这是输出。
属性
元素属性可以使用attr()方法检索。
attributes.py
#!/usr/bin/python3from pyquery import PyQuery as pqwith 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。
$ ./attributes.pymylistwidth:150px
这是输出。
网页抓取
请求是一个简单的 Python HTTP 库。 它提供了通过 HTTP 访问 Web 资源的方法。
scraping.py
#!/usr/bin/python3from pyquery import PyQuery as pqimport requests as reqresp = req.get("http://www.something.com")doc = pq(resp.text)title = doc('title').text()print(title)
该示例检索一个简单网页的标题。
resp = req.get("http://www.something.com")doc = pq(resp.text)
我们获取页面的 HTML 数据。
title = doc('title').text()print(title)
我们检索其标题。
$ ./scraping.pySomething.
这是输出。
选择标签
选择器用于选择 HTML 文档中满足某些条件的元素。 条件可以是它们的名称,ID,类名称,属性或它们的组合。
selecting.py
#!/usr/bin/python3from pyquery import PyQuery as pqdef 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标签。
def print_item(self, item):print("Tag: {0}, Text: {1}".format(item.tag, item.text))
在此函数中,我们打印标签名称及其文本。
first_li = doc("li:first")print(first_li.text())
我们选择第一个li标签,并使用text()方法打印其内容。
last_li = doc("li:last")print(last_li.text())
在这里,我们得到了最后的li标签。
odd_lis = doc("li:odd")odd_lis.each(print_item)
借助each()方法,我们将打印每个奇数li元素的标签及其内容。
$ ./selecting.pySolarisWindowsTag: li, Text: FreeBSDTag: li, Text: NetBSD
这是输出。
移除元素
remove()方法删除标签。
removing.py
#!/usr/bin/python3from pyquery import PyQuery as pqwith open("index.html", "r") as f:contents = f.read()doc = pq(contents)removed_item = doc('li:last').remove()print(removed_item)print(doc)
在示例中,我们删除了最后一个li标签。
removed_item = doc('li:last').remove()
我们选择最后一个li标签,然后用remove()删除它。 返回删除的元素。
print(removed_item)print(doc)
我们将打印已删除的项目和已删除元素的文档。
$ ./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
#!/usr/bin/python3from pyquery import PyQuery as pqwith open("index.html", "r") as f:contents = f.read()doc = pq(contents)items = [item.text() for item in doc.items('li')]print(items)
该示例迭代文档的li元素。
items = [item.text() for item in doc.items('li')]
items()方法用于在列表推导式中创建li元素的 Python 列表。
$ ./iterate.py['Solaris', 'FreeBSD', 'Debian', 'NetBSD', 'Windows']
这是输出。
附加和前置元素
append()方法在节点的末尾添加元素,prepend()方法在节点的末尾添加元素。
append_prepend.py
#!/usr/bin/python3from pyquery import PyQuery as pqwith 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
#!/usr/bin/python3from pyquery import PyQuery as pqwith 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()方法和匿名函数。
./filtering.pyFreeBSD Debian NetBSD
这是输出。
在本教程中,我们使用了 python PyQuery 库。
您可能也对以下相关教程感兴趣: jQuery 教程, Beautifulsoup 教程, Python 教程, Python FTP 教程,Python 列表推导, OpenPyXL 教程, Python Requests 教程和 Python CSV 教程。
