无法在html列表中检索li节点

时间:2014-10-18 20:19:56

标签: c# web-scraping html-lists html-agility-pack

我正在尝试抓取一个html文档,以便从ul列表中获取具有以下结构的值:

<ul id="indicators0" class="connectedIndicators ui-sortable">
  <li id="ind-speed" style="">speed=0.014774</li>
  <li id="ind-speed_01" style="display: list-item;"></li>
  ...
</ul>

我可以通过使用Html Agility Pack跟踪网络中的众多示例轻松访问节点“indicators0”:

HtmlAgilityPack.HtmlNode node = htmlDocument.DocumentNode.SelectSingleNode("//ul[@id='indicators0']");

但是,任何尝试检索li节点都无法成功。我正在尝试以下内容:

HtmlAgilityPack.HtmlNode subNode = htmlDocument.DocumentNode.SelectNodes("//ul[@id='indicators0'] //li").FirstOrDefault();

或者

HtmlAgilityPack.HtmlNode subNode = node.Descendants("li").FirstOrDefault();

在两种情况下都返回空值。欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

你试过吗。

HtmlAgilityPack.HtmlNode subNode = HtmlDocument.DocumentNode.SelectSingleNode("//ul[@id='indicators0']/li[1]");

当提取这些值时,您正在使用xsl向下映射到节点/节点以查找您要查找的项目,而只是第一个。

在第一个中,理所当然,所以将整个UL从html中拉出来。

另外2我现在看不出太多问题,道歉,我很累。

如果我的建议不起作用,您是否已调试以找出该节点的内容?你有可能在正确的时候找到正确的ul,或者你是否可能在动态加载之前寻找LI(我不确定你是否动态加载任何东西,只是做出一个假设)

如果LI的id始终相同,那么你也可以这样做

HtmlAgilityPack.HtmlNode subNode = HtmlDocument.DocumentNode.SelectSingleNode("//li[@id='ind-speed']");

如果收到了某些内容,那么你很有可能在htmlDoc的范围内首先找到你要查找的描述的多个ul