使用 CSS 或 XPath 选择器解析 HTML?

Posted

技术标签:

【中文标题】使用 CSS 或 XPath 选择器解析 HTML?【英文标题】:Parse HTML with CSS or XPath selectors? 【发布时间】:2011-02-06 17:54:47 【问题描述】:

我的目标是用 lxml 解析 html,它支持 XPath 和 CSS 选择器。

我可以将我的模型属性绑定到 CSS 或 XPath,但我不确定哪个是最好的,例如更改 HTML 布局时更轻松,表达式更简单,提取速度更快。

在这种情况下你会选择什么?

【问题讨论】:

【参考方案1】:

你觉得哪个更舒服?大多数人倾向于发现 CSS 选择器更容易,如果其他人会维护你的工作,你应该考虑到这一点。造成这种情况的一个原因可能是不太担心 XML 名称空间是许多错误的根源。 CSS 选择器往往比等效的 XPath 更紧凑,但只有您可以决定这是否是相关因素。我会注意到,jquery 的选择语言是基于 CSS 选择器而不是 XPath 建模的,这并非偶然。

另一方面,XPath 是一种用于一般 DOM 操作的更具表现力的语言。例如,没有等效于“父”或“祖先”轴的 CSS 选择器,也没有办法直接寻址与 XPath 中的“text()”等效的文本节点。相比之下,我想不出任何可以在 CSS 选择器中表达但不能在 XPath 中表达的 DOM 路径,尽管 E[foo~="warning"] 和 E[lang|="en"] 在 XPath 中显然很棘手。

CSS 选择器确实具有 XPath 不是伪类,但如果您正在执行服务器端 DOM 操作,这些可能对您没有用处。

至于哪个导致提取速度更快,我不知道 lxml,但我希望等效路径具有非常相似的性能特征。

【讨论】:

以上是关于使用 CSS 或 XPath 选择器解析 HTML?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Chrome 开发者工具中使用 XPath 或 CSS 选择器搜索 DOM 元素?

第四部分 解析库的使用(XPathBeautiful SoupPyQuery)

Jsoup css 选择器代码(包括 xpath 代码)

python爬虫之html解析Beautifulsoup和Xpath

css 或 xpath 选择器:具有特定值的任何属性的元素

用于 BigQuery UDF 的纯 javascript HTML 解析器