C# 使用HTML Agility Pack仅获取网页文本?
我正试图刮一个网页来获取文本。我把每个单词都放到字典里,然后计算每个单词出现在页面上的次数。我正在尝试使用本文建议的HTML Agility Pack:C# 使用HTML Agility Pack仅获取网页文本?,c#,html-agility-pack,C#,Html Agility Pack,我正试图刮一个网页来获取文本。我把每个单词都放到字典里,然后计算每个单词出现在页面上的次数。我正在尝试使用本文建议的HTML Agility Pack: HtmlWeb=newhtmlweb(); HtmlDocument doc=web.Load(url); int字数=0; Dictionary dict=新字典(); foreach(doc.DocumentNode.SelectNodes(“//text()”)中的HtmlNode节点) { MatchCollection matches
HtmlWeb=newhtmlweb();
HtmlDocument doc=web.Load(url);
int字数=0;
Dictionary dict=新字典();
foreach(doc.DocumentNode.SelectNodes(“//text()”)中的HtmlNode节点)
{
MatchCollection matches=Regex.matches(node.InnerText,@“\b(?[a-z]{2,}|[ai])\b”,RegexOptions.IgnoreCase);
foreach(匹配中的匹配)
{
//将条目添加到字典中
}
}
然而,在我当前的实现中,我仍然从标记中得到了很多不应该统计的结果。它很接近,但还不太接近(我不认为它是完美的)
我举个例子。我的结果显示了“宽度”和“谷歌标签”这两个词的很多用法,尽管它们根本不在页面的实际文本中
有没有关于如何解决这个问题的建议?谢谢 你不能确定你正在搜索的单词是否显示给用户,因为会有JS执行和CSS规则影响到这一点 下面的程序确实为“宽度”和“谷歌标签”找到了0个匹配项,但找到了126个“html”匹配项,而Chrome Ctrl+F找到了106个匹配项 请注意,如果程序的父节点是
,则程序与单词不匹配
HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(url);
int wordCount = 0;
Dictionary<string, int> dict = new Dictionary<string, int>();
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()"))
{
MatchCollection matches = Regex.Matches(node.InnerText, @"\b(?:[a-z]{2,}|[ai])\b", RegexOptions.IgnoreCase);
foreach (Match s in matches)
{
//Add the entry to the dictionary
}
}
using HtmlAgilityPack;
using System;
namespace WordCounter
{
class Program
{
private static readonly Uri Uri = new Uri("https://www.w3schools.com/html/html_editors.asp");
static void Main(string[] args)
{
var doc = new HtmlWeb().Load(Uri);
var nodes = doc.DocumentNode.SelectSingleNode("//body").DescendantsAndSelf();
var word = Console.ReadLine().ToLower();
while (word != "exit")
{
var count = 0;
foreach (var node in nodes)
{
if (node.NodeType == HtmlNodeType.Text && node.ParentNode.Name != "script" && node.InnerText.ToLower().Contains(word))
{
count++;
}
}
Console.WriteLine($"{word} is displayed {count} times.");
word = Console.ReadLine().ToLower();
}
}
}
}