0

我正在开发一个需要我解析网络上的 html 网站的小应用程序。我的问题如下:解析例程对于某些信息工作正常但我正在寻找几个小时来获取一些拒绝出现的信息的方法。

这是我愿意解析的部分代码结构:

<body>

   `<header>
    <nav>
    <div.....>
       <aside......>
       <main>
           <div .....>
              <a ......>
              <a ......>
           </div>
             .
             .
             .
           <div id="general">
               <h2> ........</h2>
               <p>
                  <span class="label">text</span>
                  "text 2 to be parsed"
                  <br>
                  <span class="label">other text</span>
                  "text 3 to be parsed"
                  <br>

只是结构的一个例子,确切地说,网址是http://www.ourairports.com/airports/EBBR/pilot-info.html

好的,似乎 html 代码没有出现在预览中,所以在上面页面的源代码中,当你看到 [div id="general"] 时,下面有一个 [p] 后跟 [span class="label "]some text[/span] 并且在括号下方有文本。这发生在几行上,我需要捕捉这些信息。

我试过: //body/div/main/div[@id='general']/p as XpathQueryString 但结果是 1 个节点并且为空

也有 div[@id='general'] 但结果没有找到节点,有 div[@id='general']/p/span 结果没有找到节点,有 //div/p/span[@class= 'label'] 结果是标志和 >/span> 之间的标题,但我希望检索后面引号之间的文本,但我无法弄清楚如何成功。我想我已经尝试了所有组合(除了上面解释的很多其他组合)但没有机会。是否有特殊的路径可以访问此文本?

感谢您的建议。

顺便说一句,这是我在 stackoverflow.com 上的第一篇文章,我的第一语言是法语,所以对于任何不遵守的规则或我的英语不好,我提前道歉。

在键盘上享受您的白天、晚上、……夜晚。

阿兰

4

1 回答 1

0

您的第一个表达式//body/div/main/div[@id='general']/p应返回单个节点 <p>。正如您所观察到的,它在所引用的网站上完全以这种方式工作。表达式向下到达该节点,但没有深入到文本嵌套的位置。然而,你也必须得到文本,只是封装在 html 中,周围有花哨的标签。正确使用的良好 XPath 选择器 API 应该返回匹配的 html 节点,包括 <p> 标记本身。
如果您最后看到的只是文本节点,请尝试以下操作:

将 <span> 中的文本视为 html 节点、text()节点。
//div[@id='general']/p/text()
这将匹配“要解析的文本”。Anode()将匹配任何 html 节点(甚至是标签之间的文本)和*任何非text()节点。
对于任意数量的步骤,请使用双斜杠:
//div[@id='general']/p//text()
现在您匹配 <p> 标记下的每个文本节点,无论嵌套级别如何。并且由于文本节点根据定义是叶节点(不能包含其他节点),这保证了您不会多次匹配树中同一路径的成员。

对你的表达的一些评论:
//body是肤浅的,只有一个主体,html 定义了确切的位置。
由 量化的节点@id不需要为其父级选择器处理,以//div[@id='something unique'].

了解有关 XPath 的更多信息。正确返回所选“节点”而不仅仅是连接文本的 API 可以在理解表达式在实践中如何工作方面发挥重要作用。

于 2013-10-19T22:01:14.227 回答