c#抓取网页数据(就是通过编程的方法去抓取不同网站网页进行分析筛选)

优采云 发布时间: 2022-03-05 08:21

  c#抓取网页数据(就是通过编程的方法去抓取不同网站网页进行分析筛选)

  近期工作需要定期爬取不同城市的每日气温。其实就是通过编程爬取不同的网站网页进行分析筛选的过程。 .NET 提供了许多类来访问和从远程网页获取数据,例如 WebClient 类和 HttpWebRequest 类。这些类对于使用 HTTP 访问远程网页并下载它们很有用,但它们在解析下载的 HTML 方面非常薄弱。推荐使用开源组件 HTML Agility Pack(),其设计目标是尽可能简化 HTML 文档的读写。包本身利用 DOM 文档对象模型来解析 HTML。顺便记录一下最近采集的爬取历史和当前天气网站备份:

  编程示例如下:我们要获取以下网页中的天气信息:

  

  下载HTML Agility Pack组件,新建一个控制台程序,在你的项目中引用对应框架版本对应的组件。示例代码如下:

   string url = @"http://lishi.tianqi.com/beijing/201701.html";

var webGet = new HtmlWeb();

var document = webGet.Load(url);

var div = document.DocumentNode.SelectNodes("//div[@class=‘tqtongji2‘]/ul");

foreach (HtmlNode node in div)

{

var tmpNode = node.SelectNodes("li");

Console.WriteLine(string.Format("{0}-----------{1}---------{2}----------{3}",

tmpNode[0].InnerText,

tmpNode[1].InnerText,

tmpNode[2].InnerText,

tmpNode[3].InnerText));

}

Console.ReadKey();

  程序运行效果:汉字出现乱码,如下图

  

  通过分析HTML Agility Pack源码,在HtmlWeb类的Get(Uri uri, string method, string path, HtmlDocument doc)方法中,局部变量resp为http请求的响应。设置断点发现resp.ContentEncoding为空。因此,数据是通过 HttpWebRequest 下载的。示例代码如下:

   string url = @"http://lishi.tianqi.com/beijing/201701.html";

HttpWebRequest req = WebRequest.Create(new Uri(url)) as HttpWebRequest;

req.Method = "GET";

WebResponse rs = req.GetResponse();

Stream rss = rs.GetResponseStream();

HtmlDocument doc = new HtmlDocument();

doc.Load(rss);

var div = doc.DocumentNode.SelectNodes("//div[@class=‘tqtongji2‘]/ul");

foreach (HtmlNode node in div)

{

var tmpNode = node.SelectNodes("li");

Console.WriteLine(string.Format("{0}-----------{1}---------{2}----------{3}",

tmpNode[0].InnerText,

tmpNode[1].InnerText,

tmpNode[2].InnerText,

tmpNode[3].InnerText));

}

Console.ReadKey();

  代码运行如下:

  

  没关系!!!

  原文:

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线