【发布时间】:2013-11-27 21:48:16
【问题描述】:
我无法从 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")
我觉得这很简单,但遇到了障碍。让我知道我需要发布哪些其他信息。
【问题讨论】:
-
你必须更清楚地描述卡住是什么意思。您是否收到编译/语法错误?您是否收到运行时错误?你得到一个空的结果集吗?
-
我正在尝试提取每个表行的 data-pid 属性并将其存储在一个变量中,但我无法让任何工作正常工作。上面发布的代码将获取我需要的内容,但我只想从中获取 data-pid 属性。
标签: powershell xpath html-parsing