使用* vs元素标记

问题描述 投票:0回答:2

我正在写一个脚本来从网上抓取一些数据。

我直接从浏览器复制了不同页面上几个相同元素的XPath,生成了//*[@id="priceblock_dealprice"]

然而,他们都是span元素。我不太了解XPath如何在幕后工作,但我认为//span[@id="priceblock_dealprice"]显然会更快,因为它只需要检查span元素?这是真的?

在这个特定的背景下使用*,比如span有什么好处吗?

selenium xpath web-scraping screen-scraping
2个回答
3
投票

通过将*更改为span,您不太可能看到巨大的性能差异。

更大的性能影响将消除或至少限制后代轴//

使用从根节点开始的后代轴,您将强制XPath引擎遍历整个节点树并检查每个元素,这对于大型文档来说可能很昂贵。

如果您要提供有关结构的任何线索,引擎可以避免大量不必要的工作,并且应该表现更好。

例如:

/html/body/section[2]/div//*[@id="priceblock_dealprice"]

除了性能,其他考虑因素是维护和灵活性。

使用更具体的XPath可能会获得更好的性能,但随后对页面结构和元素名称的更改可能会导致事物不再匹配。您需要决定什么更重要。


1
投票

是的,最好使用'span'而不是*,但因为它有一个ID,所以不使用XPath,最好使用By.ID.与Xpath相比,ID会有些快。

© www.soinside.com 2019 - 2024. All rights reserved.