按标签名称排除某些后代,然后抓取文本

时间:2015-05-13 01:28:27

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

我正在使用C#中的HtmlAgilityPack从网页上抓取一些数据。我得到了包含我想要抓取的所有文本的元素,但问题是我想要排除某些元素,例如< big>和< style>元素。一些页面具有< style>随机点中的元素,目前HtmlAgilityPack将CSS规则包含为文本。

我目前有以下代码:

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

“paragraphElements”确实包含所有< p>元素,但其中一些元素包含我不想作为孩子的元素类型。

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

1 个答案:

答案 0 :(得分:0)

我明白了。

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

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

我将删除克隆拷贝上的不想要的元素,抓取克隆元素的内部文本。