【问题标题】:Using xpath to parse out html attributes from webpage使用 xpath 从网页中解析出 html 属性
【发布时间】: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


【解决方案1】:

在您的foreach 循环中,您应该能够像这样获得属性的值:

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

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

$item.Attributes | Select Name,Value

【讨论】:

  • 你知道这是否可以使用通配符吗?
  • 另外,将它用于嵌套标签的最佳方法是什么?谢谢,到目前为止一切正常。
  • RE 通配符,我不这么认为,但您可以使用 Attributes 属性,例如:$item.Attributes | Select Name,Value。 RE 嵌套标签,你总是可以使用 $item.SelectNodes('').
  • 有机会我会试试这个,谢谢你的信息。
  • 我的逻辑与我的 xpath 查询一起工作,但它工作不正常。我可以获取我感兴趣的信息,但它不会以正确的方式遍历这些项目。我可以获得正确的 ID 来工作,但是当我尝试获取日期时,它只会不断吐出相同的日期。我应该打开一个新问题还是更新我原来的问题的详细信息?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-13
  • 1970-01-01
  • 2014-07-06
  • 2016-02-22
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多