【发布时间】:2022-11-23 02:11:20
【问题描述】:
我试图从页面中仅获取可见文本,将其拆分并返回页面上的单词数组。 我的代码:
public async Task<string[]> GetText(string link)
{
string htmlSource = await httpClient.GetStringAsync(link);
string text = "";
page = new HtmlDocument();
page.LoadHtml(htmlSource);
IEnumerable<HtmlNode> nodes = page.DocumentNode.Descendants().Where(n =>
n.NodeType == HtmlNodeType.Text &&
n.ParentNode.Name != "script" &&
n.ParentNode.Name != "style");
foreach (HtmlNode node in nodes)
{
text += node.InnerText;
}
Regex regex = new Regex(@"\W");
text = text.ToLower();
text = regex.Replace(text, " ");
string[] result = text.Split(' ');
return result;
}
我的代码使它不好,因为它合并了单词 我认为问题是我如何从节点中提取文本,但我不知道如何修复它
【问题讨论】:
-
只是在每个节点的末尾添加一个空格?所以在
foreach循环中:text += node.InnerText + " "; -
所以隐藏的 div 中的文本不好吗?
-
请澄清“可见”。人类可见的内容可能与 HTML 源代码中的内容完全不同。
标签: c# html-agility-pack