c爬虫抓取网页数据( 循环来实现所有网页的爬取总结(图))
优采云 发布时间: 2022-01-06 17:16c爬虫抓取网页数据(
循环来实现所有网页的爬取总结(图))
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);
}
}
总结
静态网页的爬取比较简单,可以分为以下几个步骤