使用xpath从网页中解析出html属性

时间:2013-11-27 21:48:17

标签: powershell xpath html-parsing

我无法从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

我尝试了一些其他方法来提取 data-pid 属性,但没有取得任何成功。这是我尝试过的一种方法,但它一遍又一遍地返回相同的值。

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

我觉得这很简单,但遇到了障碍。让我知道我需要发布的其他信息。

1 个答案:

答案 0 :(得分:1)

foreach循环中,您应该能够获得属性的值,如下所示:

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

要遍历该节点上的所有属性,请尝试:

$item.Attributes | Select Name,Value