本节主要来介绍一下,在C#中制造爬虫,最为常见、常用、实用的基础类 ------ WebRequest、WebResponse。
先来看一个示例 [1.2.1]:
1 using System; 2 using System.IO; 3 using System.Net; 4 using System.Text; 5 6 class Program 7 { 8 static void Main(string[] args) 9 { 10 var request = WebRequest.Create(@"https://www.cnblogs.com/mikecheers/p/12090487.html"); 11 request.Method = "GET"; 12 using (var response = request.GetResponse()) 13 { 14 using (var stream = response.GetResponseStream()) 15 { 16 using (var reader = new StreamReader(stream, new UTF8Encoding(false))) 17 { 18 var content = reader.ReadToEnd(); 19 Console.WriteLine(content); 20 } 21 } 22 response.Close(); 23 } 24 request.Abort(); 25 Console.ReadLine(); 26 } 27 }
运行以上代码,我们能看到类似如下的输出:
{省略若干html代码}
<div id="post_body" class="blogpost-body "> <p> 在构建本章节内容的时候,笔者也在想一个问题,究竟什么样的采集器框架,才能算得上是一个“全能”的呢?就我自己以往项目经历而言,可以归纳以下几个大的分类:</p> <ol> <li>根据通讯协议:HTTP的、HTTPS的、TCP的、UDP的;</li> <li>根据数据类型:纯文本的、json的、压缩包的、图片的、视频的;</li> <li>根据更新周期:不定期更新的、定期更新的、增量更新的;</li> <li>根据数据来源:单一数据源、多重数据源、多重数据源混合;</li> <li>根据采集点分布:单机的,集群的;</li> <li>根据反爬虫策略:控制频率的,使用代理的,使用特定UA的;</li> <li>根据配置:可配置的,不可配置的;</li> </ol> <p> 以上的分类,也有可能不够全面,不过应该可以涵盖主流数据采集的分类了。</p> <p> 为了方便阐述一个爬虫的工作原理,我们从上面找到一条最简单路径,来进行阐述(偷奸耍滑?非也,大道化简,万变不离其宗:)</p> <p> OK,一个小目标,单机、单一数据源、定期更新、纯文本、HTTP的爬虫,来一只。</p> <p> </p> <p style="margin-left: 30px;">在第一境的后面各节中,我们就来逐步实现这个小目标,同时,也来探究一下其中的原理。只有掌握了这些,才能通过继续扩展,衍生出强大的爬虫:)</p> </div>
{省略若干html代码}
一只爬虫小幼崽儿,就如此轻松的诞生了~
示例 [1.2.1]中,最核心的部分,就是使用了本节的主题、两个基础类:WebRequest和WebResponse。
从名称上就可以看出,这两个类是针对Web资源的操作类。下面,将针对这两个类来做针对性的细究。
有点儿事儿,未完待续……