2013-10-19 45 views
0

我正在研究一個小應用程序,它需要我解析網站上的html網站。 我的問題如下: 解析例程對於一些信息工作正常,但我正在尋找一些方法來獲得一些拒絕出現的信息。解析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> 

只是結構的爲例,要精確的URL是http://www.ourairports.com/airports/EBBR/pilot-info.html

OK似乎在上面的頁面的源代碼中,當你看到[div id =「general」],下面有一個[p]後面跟着[span class =「label」]的某些文本時,html代碼並未出現在預覽中[/ span],並在下面,你有文字在括號之間。這發生在幾行,我需要捕捉這些信息。

我試着://體/ DIV /主/格[@ ID = '一般']/P作爲XpathQueryString但結果爲1個節點和空

也與DIV [@ ID =」一般'],但結果是沒有找到節點, 與div [@ id ='general']/p/span結果是沒有找到節點, 與/ div/p/span [@ class ='label'] results are標記和>/span>之間的標題,但我期待檢索後面的引號之間的文本,我無法弄清楚如何成功。我想我已經嘗試了所有的組合(很多別人比上面解釋的),但沒有機會。有沒有特殊的路徑可以閱讀本文?

感謝您的建議。

順便說一句,這是我在stackoverflow.com上的第一篇文章,我的第一語言是法語,所以我對任何未遵守規則或我英語不好的人提前道歉。

享受你的一天,晚上,...在鍵盤上的夜晚。

阿蘭

回答

0

你的第一表達//body/div/main/div[@id='general']/p預計返回單個節點,所述<p>。正如你所看到的,它在推薦網站上的工作方式就是如此。表達式向下到達該節點,但不在文本嵌套的位置。但是,您也必須獲得文本,只需將其封裝在HTML中,並在其周圍添加花哨的標籤。良好使用的XPath選擇器API應該返回匹配的html節點,包括標籤本身。
如果你最終看到的只是文本節點嘗試以下操作:

認爲<跨度> S作爲HTML節點,text()節點之間的文字。
//div[@id='general']/p/text()
這將匹配「要解析的文本」。 A node()將匹配任何html節點(甚至是標籤之間的文本)和*任何非text()節點。
對於任何數量的步驟,使用雙斜線:
//div[@id='general']/p//text()
現在你<p>標籤下的每個文本節點匹配,無論嵌套級的。並且由於文本節點按照定義葉節點(不能包含其他節點),因此這可以保證您不會多次將樹中相同路徑的成員進行匹配。

對你表情的一些評論:
//body是膚淺的,只有一個body和html定義在哪裏。
@id量化的節點不應該由父母的選擇器繼續進行,從//div[@id='something unique']開始。

瞭解關於XPath的更多信息。正確地返回所選「節點」而不僅僅是連接文本的API可以在理解表達式在實踐中如何工作方面發揮重要作用。

+0

嗨,謝謝你的回答。由於我不知道如何直接問你關於同一主題的另一個問題,我只是回答了我自己的問題。你可以關注一下嗎?感謝, Al – joloki