网站首页 > 知识剖析 正文
从本质上看, PyQuery 与知名的Beautiful Soup同样具备解析HTML文档的卓越能力。值得关注的是,鉴于 PyQuery是基于业界领先的lxml库构建而成,其在实际应用环境下的表现速度要高于Beautiful Soup。值得重点关注的,PyQuery仅支持CSS这一种样式选择器,基于这种精益求精的设计理念,使得其在功能方面相较于Beautiful Soup展现出了明显优势,使得诸如基础内容抓取等操作过程更加简便实用。如果您对CSS选择器有着深刻理解或者对于该技术有着特别的偏好,那么无疑,PyQuery将会成为您最佳的选择。
pyquery: a jquery-like library for python, 官网对 PyQuery 的介绍,像JQuery一样的Python库。
开始使用
PyQuery 是第三方库,因此在使用之前需要安装该库。
pip install pyquery
安装好后,就可以使用了,以下为获取百度标题的示例:
from pyquery import PyQuery as pq
doc = pq(url="http://www.baidu.com")
print(doc('title').text())
# 百度一下,你就知道
在上边的代码中,直接将网址作为参数传递给 PyQuery 对象,接着从获取到的对象中,获取 title 标签,并调用 text 方法获取其文本值。
上边的案例中,我们使用了 URL 参数初始化 PyQuery,其构造方法还提供了使用字符串或文件初始化的功能,可以根据实际情况选择使用。
from pyquery import PyQuery as pq
#----字符串初始化-----
html = """<span>第一个标签</span>"""
doc = pq(html)
print(doc('span').text())
#----文件初始化-----
doc = pq(filename='./test.html')
print(doc('span').text())
获取文本和 HTML
在 PyQuery 中,使用 text()方法检索元素文本,并可以使用 html()方法获取元素的 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>
# 获取文本
text = doc("ul").text()
print("\n".join(text.split()))
# Solaris
# FreeBSD
# Debian
# NetBSD
# Windows
# 获取html元素
text = doc("ul").html()
print("\n".join(text.split()))
# <li>Solaris</li>
# <li>FreeBSD</li>
# <li>Debian</li>
# <li>NetBSD</li>
# <li>Windows</li>
获取属性
通过使用 attr()方法获取属性值内容
# 现获取元素对象
tag = doc("ul")
# 再获取元素属性
print(tag.attr("id"))
print(tag.attr("style"))
# mylist
# width:150px
标签选择
使用选择器可以方便的从 html 文档中选择需要的标签,可以是标签的名字,也可以是 clss,id 或其他属性。熟悉前端框架 jQuery 或者 css 的就会非常容易上手。
def print_item(self, item):
print("Tag: {0}, Text: {1}".format(item.tag, item.text))
# 选择li的第一个元素
first_li = doc("li:first")
# 选择li的最后一个元素
last_li = doc("li:last")
# 获取技术li
odd_lis = doc("li:odd")
# 借助each方法遍历所有元素
odd_lis.each(print_item)
# Solaris
# Windows
# Tag: li, Text: FreeBSD
# Tag: li, Text: NetBSD
更多的方法
items()方法,通过此方法获取可迭代元素集合。
# 将li元素内容放到list中
items = [item.text() for item in doc.items('li')]
filter()方法,通过此方法可以过滤元素,方法接受一个函数,用于判断过滤条件。
# 获取li标签中以F,D,N开头的元素内容
doc('li').filter(lambda i: pq(this).text().startswith(('F', 'D', 'N')))
PyQuery 还提供了对 html 文档编辑的功能,我们在爬虫的时候很少会主动去删除或添加节点,这里就不做过多的说明,以下是一些简单的案例:
# 删除li最后一个元素
doc('li:last').remove()
# 获取clss为mylist的节点
mylist = doc("#mylist")
# 在节点前添加一个节点
mylist.prepend("<li>DragonFly</li>")
# 在节点后添加一个节点元素
mylist.append("<li>OpenBSD</li>")
# 给节点添加class
mylist.addClass("test")
# 删除节点class
mylist.removeClass("test")
猜你喜欢
- 2025-06-15 Java 加密解密PowerPoint文档(java中加密解密)
- 2025-06-15 JavaScript重构技巧—数组,类名和条件
- 2025-06-15 【含代码】Excel文件合并工具,我的AI编程经历
- 2025-06-15 课堂点名总尴尬?试试 DeepSeek,或能实现点名自由!(附教程)
- 2025-06-15 按钮重复点击:这“简单”问题,为何难住大半面试者与开发者?
- 2025-06-15 ASP.NET MVC+Bootstrap个人博客之文章打赏(六)
- 2025-06-15 jq+ajax+bootstrap改了一个动态分页的表格
- 2025-06-15 使用OC链式调用方式简化SpriteKit的动画调用
- 2025-06-15 键盘任意键控制 swiper滑屏 附js代码
- 2025-06-15 son-c库:打造高性能Web应用的完美解决方案
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)