在 Python 中解析 HTML 和 XML 文档有很多库可供使用,包括但不限于:
-
Beautiful Soup: 一个解析库,用来从 HTML 和 XML 文档中提取数据。它使用简单,并且能够以流畅的方式处理复杂的文档结构。
-
lxml: 一个高性能的解析库,支持 XPath 和多种不同的解析模式。它可以从 HTML 和 XML 文档中提取数据,并且可以用来构建新的文档。
-
PyQuery: 一个轻量级的库,使用方式类似于 jQuery,是对 lxml 的进一步封装。它可以用来从 HTML 和 XML 文档中提取数据,并且可以用来构建新的文档。
-
html5lib: 一个慢速但容错性强的库,可以解析有误或不完整的 HTML 文档。
对于选择哪个库,要考虑到你的需求和对性能的要求。如果需要快速地处理大型文档,那么 lxml 和 Beautiful Soup 可能是最好的选择。如果你需要一个轻量级的库,或者希望使用类似于 jQuery 的 API 来提取数据,那么 PyQuery 可能是最合适的选择。如果你需要处理有误或不完整的 HTML 文档,那么 html5lib 可能是最合适的选择。
本文主要介绍 PyQuery ,并简要分析这个 jquery-like library 在处理 HTML 的 API 与 jQuery 相比有哪些改动。
开始使用
要使用 PyQuery,首先需要安装它:
然后可以使用 PyQuery 解析 HTML 或 XML 文档,可以从字符串(Bytes)、文件或 url 加载,例如:
选取节点
与 jQuery 类似,PyQuery 使用 CSS 选择器选取元素(Element)或节点(Node)。
也可使用较复杂的选择器:
当获取到的元素不止一个时,可以遍历获取:
注意,如果直接调用方法获取文本内容或其他属性,只能获取第一个元素的对应属性。
读取属性
当定位到了想要的节点,可以获取该节点的属性(Attributes):
也可以设置或获取 CSS 属性(’-‘ 需要改成 ‘_’):
自然少不了最重要的 text 与 html 这两种方法:
注意,以上两种方法获取的是元素子节点内容,相当于原生 js 的 innerText 与 innerHTML,要获取完整 html 内容,可以使用另一方法。
总结
PyQuery 是一个基于jquery风格的,用于解析和操作 HTML 和 XML 文档的 Python 库,但并不完全兼容 jQuery 。它并不支持所有 jQuery 的特性,并且语法略有不同。由于 PyQuery 一般用于爬虫等场景,复刻全部 jQuery 功能既不现实也无必要。
在 jQuery 江河日下的今天,其在前端领域操作 DOM 的机会已经大大减少,大有成为时代的眼泪之势。而在 Python 中能看到这样一个类 jQuery 的好用解析库,泪目。也许随着前后端分离的大趋势的到来,动态网页逐渐占据主流,日后像 PyQuery 这样的 HTML 解析库终有一天也会被人忘却。
最后,感谢 PyQuery 作者大大,并引用他的一句话结尾:
I just liked the jquery API and I missed it in python so I told myself “Hey let’s make jquery in python”. This is the result.
延伸阅读
-
PyQuery 文档:https://pyquery.readthedocs.io/en/latest/index.html
-
jQuery 官网:https://jquery.com/
-
PyQuery详解:https://zhuanlan.zhihu.com/p/55532845