C#批量爬取网站验证码图片/爬取网页内容(2)

上一篇和大家讲了怎么用C#批量下载验证码图片,这一篇和大家讲讲如何用C#将网页上的html内容保存到一个本地txt文档里面。其实爬虫这个事情,相信大家可能各有各的实现方法,Python讲爬虫的书超级的多,关于C#做爬虫的....好像很少,我看到了一些比较早的用C#制作蜘蛛程序的文章,在这里我按照上一篇的格式写一下比较简单的实现。如有不对,请多指教。

1.C#控制台编程

新建一个C#控制台项目,VS->文件->新建->项目->visual c#->控制台应用程序,项目命名依旧是csharpconsole。先加入三个命名空间Net 、Web和IO,如下图所示(跟上一篇一毛一样哈哈,不过我就是分两篇博客写)。

C#批量爬取网站验证码图片/爬取网页内容(2)_第1张图片

2.编写DownloadHtml函数

这个函数的作用呢就是发送http请求,判断页面的内容类型是不是文本文件,如果是文本文件呢,就在SaveTextFile函数中把内容读取保存到本地。

public static bool DownloadHtml(string htmlUrl, string savePath)
        {
            bool value = false;
            WebResponse response = null;
            try
            {  
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(htmlUrl); 

                    /*有的网站会出现403禁止访问的报错,用下面这两句可以解决。
                    request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; QQWubi 133; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CIBA; InfoPath.2)";
                    request.Method = "GET";
                     */

                    response = request.GetResponse(); 
                    if (response.ContentType.ToLower().StartsWith("text/"))  //如果该文件是文本文件
                        value = SaveTextFile(response, savePath);                       
              }
             finally
             {
                    if (response != null) response.Close();
             }        
            return value;
        }

/**/之间的注释说的有的网站,比如豆瓣,如果不添加UA的话就会出现如下报错:

C#批量爬取网站验证码图片/爬取网页内容(2)_第2张图片

如果报错的话,把注释的代码取消注释就OK。

一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。

3.编写SaveTextFile函数

在该函数中,按行读取页面内容,按行写入txt文档。

 private static bool SaveTextFile(WebResponse response, string savePath)
        {
            bool value = false;
            Stream outStream = null;
            Stream inStream = null;
            String line = "";
            try
            {
                if (File.Exists(savePath))
                    File.Delete(savePath);
                string savefile = savePath + "html.txt";
                outStream = System.IO.File.Create(savefile); //写入本地文件的输出流
                inStream = response.GetResponseStream();  //读取web页面的输入流

                StreamReader reader = new StreamReader(inStream);
                StreamWriter writer = new StreamWriter(outStream);

                while ((line = reader.ReadLine()) != null)
                {
                    writer.WriteLine(line);
                    //buffer += line + "\r\n";
                }
                value = true;
            }
            finally
            {
                if (outStream != null) outStream.Close();
                if (inStream != null) inStream.Close();
            }
            return value;
        }

4.又到了main函数的环节

调用DownloadHtml函数就好~

 static void Main(string[] args)
 {
       DownloadHtml("https://douban.com", "E:\\douban\\"); //想爬的url,放爬下来内容的txt文档路径
 }

达浪达浪登登登,给大家看看结果:

豆瓣主页

C#批量爬取网站验证码图片/爬取网页内容(2)_第3张图片

百度主页

C#批量爬取网站验证码图片/爬取网页内容(2)_第4张图片

好啦,亲爱的们,今天的内容就到这里,下一篇我要讲讲二进制文件和文本文件。机智的你一定发现了,在C#批量爬取网站验证码/爬取网页内容(1)和C#批量爬取网站验证码/爬取网页内容(2)的博客代码注释中,我或多或少的提到了二进制文件、文本文件。当时我也是稀里糊涂的呢,所以下一篇我要把这两个整理出来,分享给大家。

你可能感兴趣的:(验证码设计与破解)