【问题标题】:exclude certain descendants by tag name, then grab the text按标签名称排除某些后代,然后抓取文本
【发布时间】:2015-05-15 07:04:29
【问题描述】:

我正在使用 C# 中的 HtmlAgilityPack 从网页上抓取一些数据。我得到了包含我想要抓取的所有文本的元素,但问题是我想排除某些元素,例如

我目前有以下代码:

var paragraphElements = bodyElement.Descendants().Where(x => x.Name == "p" && !string.IsNullOrEmpty(x.InnerText)).ToList();

"paragraphElements" 确实包含所有

元素,但其中一些元素包含我不希望作为子元素的类型。

我尝试在 SelectNodes() 方法中使用 XPath 语法,但我做了几次我认为可行的尝试,但它一直返回一个空数组。

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • xpath 搜索绝对可以做到这一点,如果您进一步研究 xpath,您会找到解决方案,我不记得了,但我相信您会做类似 * not() 并将要排除的内容放在那里
  • 请显示该页面的 HTML。

标签: c# html xpath html-agility-pack


【解决方案1】:

我明白了。

var bodyElement = doc.GetElementbyId("mainentrycontent").Clone();

bodyElement.SelectNodes(".//br | .//img | .//style | .//big").ToList().ForEach((e) => { e.Remove(); });

我将删除克隆副本上不需要的元素,并抓取克隆元素的内部文本。

【讨论】:

    猜你喜欢
    • 2013-01-14
    • 2011-11-22
    • 2022-01-28
    • 2011-07-27
    • 1970-01-01
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多