c爬虫抓取网页数据( 循环来实现所有网页的爬取总结(图))

优采云 发布时间: 2022-01-06 17:16

  c爬虫抓取网页数据(

循环来实现所有网页的爬取总结(图))

  public static List ParseLink(string html)

{

List res = new List();

var doc = new HtmlDocument();

doc.LoadHtml(html);

var linkNodes = doc.DocumentNode.SelectNodes("//a[@href]");

foreach (var linkNode in linkNodes)

{

string link = linkNode.GetAttributeValue("href", "");

if (link.StartsWith("/lishi/beijing/month"))

{

res.Add(link);

}

}

return res;

}

  到目前为止,我们已经解析出网站上所有收录过去时间段的链接。接下来,我们需要分析每个链接对应的特定网页的结构,从中获取天气信息。

  分析天气网页的结构

  上一个链接是站点链接。上一节分析了特定天气网页对应的链接集合,例如。

  

  现在我们需要从这个页面分析天气,就像解析站点结构中的目标链接一样,在浏览器中观察Html代码,发现天气的目标内容在一个表格中,所以我们只需要选择节点,因为一个节点代表某一天的天气(天气状况、温度和风向)。

  

  public static void ParseDailyWeather(string html)

{

var doc = new HtmlDocument();

doc.LoadHtml(html);

var rows = doc.DocumentNode.SelectNodes("//tr");

StringBuilder sb = new StringBuilder();

rows.RemoveAt(0);

foreach (var row in rows)

{

var cols = row.SelectNodes("td");

foreach (var col in cols)

{

string temp = col.InnerText.Replace("\r\n", "").Replace(" ", "").Trim();

sb.Append(temp + ",");

}

sb.Append("\r\n");

}

FileStream fs = new FileStream("output.csv", FileMode.Append, FileAccess.Write);

StreamWriter sw = new StreamWriter(fs, Encoding.GetEncoding("gbk"));

sw.WriteLine(sb);

sw.Close();

fs.Close();

}

  最后,为了实现对网站的爬取,需要一个循环来实现对所有网页的爬取

  public static void ParseWebsite(string url)

{

string html = Weather.GetHtml(url);

var links = Weather.ParseLink(html);

foreach (var link in links)

{

url = "http://www.tianqihoubao.com" + link;

html = Weather.GetHtml(url);

Weather.ParseDailyWeather(html);

}

}

  总结

  静态网页的爬取比较简单,可以分为以下几个步骤

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线