0

我正在学习 Scrapy,想知道是否有一些现有的工具——可能是 Chrome,也许是 Web Developer 或 Firefox 插件来快速获取 Web 元素的 XPath。或者最好的方法是学习 Xpath 并自己从头开始构建 Xpath。

4

2 回答 2

3

对于铬...

有一些插件,例如XPath Helper,可以为 HTML 页面上的给定元素生成 XPath。您还可以右键单击页面中的元素并在“元素”选项卡中拉出其位置。从那里,您可以右键单击并选择Copy XPath

要真正学习 XPath,我建议您直接从头开始编写自己的。您可以使用 直接从控制台选择节点$x()。例如,以下是在此页面上选择搜索表单的方法:

> $x("//form[@id='search']")

[<form id=​"search" action=​"/​search" method=​"get" autocomplete=​"on">​…​&lt;/form>​]

请注意,该form元素将在控制台中以交互方式展开。

以下是如何选择此页面上包含单词Thanks的所有文本节点:

> $x("//text()[contains(.,'Thanks')]")

["Thanks a lot!", "Thanks for contributing an answer to Stack Overflow!"]

请注意,如果您在此页面上尝试,您将获得比我最初做的更多的匹配。奇怪的循环。

以下是如何选择此答案已收到的票数:

> $x("//div[@id='answer-18839594']//span[@class='vote-count-post ']/text()")

["0"]

请注意一个不幸的鲁棒性问题,其中vote-count-post必须包含一个尾随空格来镜像当前源。还要注意那个 XPath 返回的不幸的低值。;-)

于 2013-09-17T00:46:00.467 回答
2

没有“元素的 XPath”这样的东西。您可能对多种路径感兴趣。最短的机器可执行路径可能是沿线*[3]/*[1]/*[2]。最易读的路径是这样的chap[3]/section[1]/para[2];但这可能取决于命名空间上下文。对于您可能想要的无上下文路径*[local-name()='chap' and namespace-uri()='...'][1]/*[local-name()='section' and namespace-uri()='...'][3]。但有时当人们要求“路径”时,他们只想要chap/section/para,即选择包括目标元素在内的许多元素的路径。但出于某些目的,最有用的 XPath 表达式可能是id('Intro').

于 2013-09-17T07:11:39.540 回答