2013-11-27 28 views
1

我無法從html頁面中提取一些屬性,並且需要一些想法來幫助我取消粘貼。使用xpath從網頁中解析出html屬性

我正在使用PowerShell,並使用htmlagilitypack來幫助我解析html。我有一個非常粗糙的版本,我可以用正則表達式做,但它並不總是工作,所以我認爲更好的選擇是使用xpath來解析結果。如果正則表達式是要走的路,請讓我知道。

到目前爲止,我已經能夠抓住我感興趣的頁面並將它按行分開。

$results = $htmldoc.DocumentNode.SelectNodes("//p[@class='row']") 

的頁面被分割我試圖使用XPath搶我感興趣的信息的每一行迭代後。

ForEach ($item in $results) { 

$ID=$null 

$ID = $item.OuterHtml 
} 

這讓我接近我所想,但它抓住了我不想要的其他一些信息。這裏是$ item.outerhml在這一點上的樣子。

OuterHtml   : <p class="row" data-latitude="41.5937565437255" data-longitude="-93.6437636649079" data-pid="4184719674"> <a href="/mod/4184719674.html" class="i"></a> 
        <span class="star"></span> <span class="pl"> <span class="date">Nov 27</span> <a href="/mod/4184719674.html">iPhone and other Cell Phone Unlocks</a> 
        </span> <span class="l2"> <span class="pnr"> <small> (Des Moines)</small> <span class="px"> <span class="p"> <a href="#" class="maptag" 
        data-pid="4184719674">map</a></span></span> </span> <a class="gc" href="/mod/" data-cat="mod">cell phones - by dealer</a> </span> </p> 

我只想要data-pid屬性。

sorry for the crappy picture

我已經嘗試了一堆其他的方法來提取數據PID屬性,但都沒有成功。這是我嘗試過的一種方法,但它一遍又一遍地返回相同的值。

$ID = $Date.DocumentNode.SelectSingleNode("//p/@data-pid") 

我有一種感覺,這是簡單的東西,但遇到了障礙。讓我知道我需要發佈什麼其他信息。

+0

你必須更清楚地說明什麼_被卡住_的手段。你會得到一個編譯/語法錯誤?你有運行時錯誤嗎?你得到一個空的結果集? –

+0

我想提取每個表格行的data-pid屬性並將其存儲在一個變量中,但我無法正常工作。上面發佈的代碼將抓住我所需要的,但我只想從它獲取data-pid屬性。 – jmreicha

回答

1

在你foreach循環,你應該能夠得到這樣的屬性值:

$ID = $item.GetAttributeValue("data-pid", "") 

走在該節點嘗試所有的屬性:

$item.Attributes | Select Name,Value 
+0

你知道這是否可以使用通配符? – jmreicha

+0

另外,使用嵌套標籤的最好方法是什麼?謝謝,到目前爲止它是有用的。 – jmreicha

+0

RE通配符,我不這麼認爲,但是您可以使用Attributes屬性例如:'$ item.Attributes |選擇名稱,值。 RE嵌套標籤,您始終可以使用$ item.SelectNodes('')。 –