使用* vs元素标签

时间:2018-09-17 23:05:37

标签: selenium xpath web-scraping screen-scraping

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

我已经直接从浏览器复制了XPaths,以将相同元素的XPath复制到不同页面上,从而产生//*[@id="priceblock_dealprice"]

但是,它们都是span元素。我对XPath的工作原理还不太了解,但是我假设//span[@id="priceblock_dealprice"]显然会更快,因为它只需要检查span元素即可?这是真的吗?

在这种特定情况下,使用*而不是span有什么好处吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

例如:

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

除性能外,其他考虑因素还包括维护和灵活性。

使用更特定的XPath可能会获得更好的性能,但是更改页面结构和元素名称可能会导致不再匹配。您将需要决定更重要的事情。

答案 1 :(得分:1)

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