C# 获取给定html中所有标记之间的文本并递归地遍历链接
我已经检查了几个关于堆栈溢出的帖子,关于获取所有html标记之间的所有单词!他们都把我搞糊涂了!有些人推荐正则表达式专门用于单个标记,而有些人提到了解析技术!我基本上是想做一个网络爬虫!为此,我得到了我在一个字符串中提取到我的程序的链接的html!我还从存储在数据字符串中的html中提取了链接!现在我想通过深度爬行,并提取我从字符串中提取的所有链接页面上的单词!我有两个问题!我如何在忽略标记和java脚本的情况下获取每个网页上的单词?其次,我如何递归地爬过链接 这就是我如何在字符串中获取html的方法:C# 获取给定html中所有标记之间的文本并递归地遍历链接,c#,html,web-crawler,html-agility-pack,C#,Html,Web Crawler,Html Agility Pack,我已经检查了几个关于堆栈溢出的帖子,关于获取所有html标记之间的所有单词!他们都把我搞糊涂了!有些人推荐正则表达式专门用于单个标记,而有些人提到了解析技术!我基本上是想做一个网络爬虫!为此,我得到了我在一个字符串中提取到我的程序的链接的html!我还从存储在数据字符串中的html中提取了链接!现在我想通过深度爬行,并提取我从字符串中提取的所有链接页面上的单词!我有两个问题!我如何在忽略标记和java脚本的情况下获取每个网页上的单词?其次,我如何递归地爬过链接 这就是我如何在字符串中获取html
public void getting_html_code_of_link()
{
string urlAddress = "http://google.com";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(urlAddress);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
Stream receiveStream = response.GetResponseStream();
StreamReader readStream = null;
if (response.CharacterSet == null)
readStream = new StreamReader(receiveStream);
else
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
data = readStream.ReadToEnd();
response.Close();
readStream.Close();
Console.WriteLine(data);
}
}
这就是我如何从我给出的url中提取链接引用:
public void regex_ka_kaam()
{
StringBuilder sb = new StringBuilder();
//Regex hrefs = new Regex("<a href.*?>");
Regex http = new Regex("http://.*?>");
foreach (Match m in http.Matches(data))
{
sb.Append(m.ToString());
if (http.IsMatch(m.ToString()))
{
sb.Append(http.Match(m.ToString()));
sb.Append(" ");
//sb.Append("<br>");
}
else
{
sb.Append(m.ToString().Substring(1, m.ToString().Length - 1)); //+ "<br>");
}
}
Console.WriteLine(sb);
}
public void regex_ka_kaam()
{
StringBuilder sb=新的StringBuilder();
//Regex hrefs=新的Regex(“”);
Regex http=newregex(“http://.*?>”;
foreach(在http.Matches(数据)中匹配m)
{
sb.追加(m.ToString());
if(http.IsMatch(m.ToString()))
{
sb.Append(http.Match(m.ToString());
某人加上(“”);
//某人追加(“
”);
}
其他的
{
sb.Append(m.ToString().Substring(1,m.ToString().Length-1));//+“
”;
}
}
(某人);
}
正则表达式不是解析HTML文件的好选择
HTML不严格,格式也不规则
使用
这将从网页中提取所有链接
public List<string> getAllLinks(string webAddress)
{
HtmlAgilityPack.HtmlWeb web = new HtmlAgilityPack.HtmlWeb();
HtmlDocument newdoc=web.Load(webAddress);
return doc.DocumentNode.SelectNodes("//a[@href]")
.Where(y=>y.Attributes["href"].Value.StartsWith("http"))
.Select(x=>x.Attributes["href"].Value)
.ToList<string>();
}
这会爬过所有链接
public void crawl(string seedSite)
{
getContent(seedSite);//gets all the content
getAllLinks(seedSite);//get's all the links
}
你可能想看看HtmlAgilityPack(它的API非常接近XmlDocument)。关于它的任何进一步的指导???
获取每个网页上的单词,忽略标记。
。你想在这里说什么..解释它就像我提供了一个指向此代码的链接!我得到一个字符串中链接的html!该字符串可能引用了html代码中的其他网页!像href!所以我需要选择第一个页面获取它的html!获取页面上的单词,忽略所有标签!在第一页之后,获取字符串中包含html的第一个href链接并获取单词,依此类推。我的编译器没有接收到decentants()函数,说它在当前上下文中不存在!
public void crawl(string seedSite)
{
getContent(seedSite);//gets all the content
getAllLinks(seedSite);//get's all the links
}