我正在编写一个脚本来从网络上抓取一些数据。
我已经直接从浏览器复制了XPaths,以将相同元素的XPath复制到不同页面上,从而产生//*[@id="priceblock_dealprice"]
。
但是,它们都是span
元素。我对XPath的工作原理还不太了解,但是我假设//span[@id="priceblock_dealprice"]
显然会更快,因为它只需要检查span
元素即可?这是真的吗?
在这种特定情况下,使用*
而不是span
有什么好处吗?
答案 0 :(得分:3)
通过将*
更改为span
,您不太可能看到巨大的性能差异。
对性能的更大影响是消除或至少限制后代轴//
。
使用从根节点开始的后代轴,您将迫使XPath引擎遍历整个节点树并检查每个元素,这对于大型文档而言可能是昂贵的。
如果您要提供有关结构的任何线索,则引擎可以避免很多不必要的工作,并且应该表现得更好。
例如:
/html/body/section[2]/div//*[@id="priceblock_dealprice"]
除性能外,其他考虑因素还包括维护和灵活性。
使用更特定的XPath可能会获得更好的性能,但是更改页面结构和元素名称可能会导致不再匹配。您将需要决定更重要的事情。
答案 1 :(得分:1)
是的,最好使用'span'而不是*,但是因为它具有ID,所以最好使用By.ID代替XPath。 与Xpath相比,ID会更快。