我想使用HTMLAgilityPack
获取网页文字。我有一些代码:
HtmlAgilityPack.HtmlWeb TheWebLoader = new HtmlWeb();
HtmlAgilityPack.HtmlDocument TheDocument = TheWebLoader.Load(textBox1.Text);
List<string> TagsToRemove = new List<string>() { "script", "style", "link", "br", "hr" };
var Strings = (from n in TheDocument.DocumentNode.DescendantsAndSelf()
where !TagsToRemove.Contains(n.Name.ToLower())
select n.InnerText).ToList();
textBox2.Lines = Strings.ToArray();
问题是,它也会返回script
标记的内容。我不知道为什么会这样。有人能帮助我吗?
答案 0 :(得分:3)
你的问题来自于InnerText没有返回你期望的事实。
在:
<A>
Text1
<B>Text2</B>
</A>
它返回:
Text1
Text2
然后,例如,对于根节点,执行document.DocumentNode.InnerText
将为您提供script
等中的所有文本...
我建议你删除所有你不想要的标签:
foreach (HtmlNode nodeToRemove in (from descendant in TheDocument.DocumentNode.Descendants()
where TagsToRemove.Contains(descendant.Name)
select descendant).ToList())
nodeToRemove.Remove();
然后获取文本元素列表:
List<string> Strings = (from descendant in TheDocument.DocumentNode.DescendantsAndSelf().OfType<HtmlTextNode>()
select descendant.InnerText).ToList();