Python XPath 和 CSS 选择器的比较

2023-04-17 00:00:00 python xpath 选择器

XPath 和 CSS 选择器都是用来查找 HTML 或 XML 中元素的工具,但它们具有不同的语法和用法。

  1. 语法

XPath 使用路径表达式来定位元素,其中元素可以按其层次结构或属性值进行选择。语法示例:

//div[@class='example']

这个 XPath 表达式将选择所有 class 属性为 'example' 的 div 元素。

CSS 选择器使用选择器来定位元素,其中元素可以按其类、ID、标签名或其他属性进行选择。语法示例:

div.example

这个 CSS 选择器将选择所有 class 属性为 'example' 的 div 元素。

  1. 表达能力

XPath 比 CSS 选择器更为强大,可以通过包含和排除操作符进行元素集合运算,也可以选择元素的祖先和后代。XPath 还支持正则表达式和序列运算。

CSS 选择器的表达能力较弱,只能进行简单的选择器组合和属性选择。

  1. 性能

XPath 的性能较差,因为它需要对整个文档进行扫描以查找匹配的元素。对较大的文档而言,这种操作可能会非常耗时。

CSS 选择器的性能更好,因为它只需要检查元素的标签名和属性值即可确定元素是否匹配。因此,CSS 选择器通常比 XPath 更快。

  1. 使用场景

由于 XPath 的表达能力更强,它更适合于需要进行元素集合运算或选择元素的祖先和后代等高级操作的情况。XPath 还允许使用函数和变量,使其更加灵活。

CSS 选择器适合于简单的选择器组合或属性选择方案,这些选择器在查找元素时非常快。

示例代码:

使用 XPath 选择包含“pidancode.com”的 a 元素:

from lxml import html

page = html.fromstring('<a href="http://pidancode.com">皮蛋编程</a>')
link = page.xpath('//a[contains(@href, "pidancode.com")]')[0]
print(link)

使用 CSS 选择器选择 class 属性为 'example' 的 div 元素:

from bs4 import BeautifulSoup

html_doc = '<div class="example">Example Div</div>'
soup = BeautifulSoup(html_doc, 'html.parser')
div = soup.select_one('div.example')
print(div)

相关文章