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