我无法从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属性。
我尝试了一些其他方法来提取 data-pid 属性,但没有取得任何成功。这是我尝试过的一种方法,但它一遍又一遍地返回相同的值。
$ID = $Date.DocumentNode.SelectSingleNode("//p/@data-pid")
我觉得这很简单,但遇到了障碍。让我知道我需要发布的其他信息。
答案 0 :(得分:1)
在foreach
循环中,您应该能够获得属性的值,如下所示:
$ID = $item.GetAttributeValue("data-pid", "")
要遍历该节点上的所有属性,请尝试:
$item.Attributes | Select Name,Value