明晨网络

电话: 136-6532-7492 QQ: 给我发送消息 8507-0741

MySpider(C#)中的一个采集类的片段:下载获取网页

明晨网络原创,2009-04-15 17:50, 文章标签: Spider 采集 MySpider

    明晨网络MingchenNet.com旗下站点搜遍青岛www.qdseek.com是一个地区工作垂直搜索引擎,为了抓取信息,必须使用采集器——或者说网络蜘蛛。由于是持续抓取,所以应当使用WinForm。目前网络上有这样一些通用采集器,做得最好的应该就是火车头了,火车头使用C#开发。但是对于搜遍青岛www.qdseek.com来说,完全无法保证数据抽取的精准性。所以明晨网络自主开发了MySpider采集蜘蛛。最初MySpider使用VB6.0编写,后来发展为VB.NET 2005版本,现在发展到了C# 2008。这里给出一段代码,演示如何利用.NET抓取网络文本文件:

   

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.IO;
  6. using System.Text.RegularExpressions;
  7.  
  8. namespace MySpider
  9. {
  10.     class Spider
  11.     {
  12.         #region GetHttpText获取网络文本代码
  13.         /// <summary>
  14.         /// GetHttpText获取网络文本代码
  15.         /// </summary>
  16.         /// <param name="Url">网址</param>
  17.         /// <param name="Method">提交方式,GET或者POST</param>
  18.         /// <param name="PostData">提交数据</param>
  19.         /// <param name="Charset">编码模式</param>
  20.         /// <param name="UserAgent">客户端标识</param>
  21.         /// <param name="Referer">来路</param>
  22.         /// <param name="cookie">COOKIE</param>
  23.         /// <returns>网络文本文件源代码</returns>
  24.         public string GetHttpText(
  25.             string Url,
  26.             string Method,
  27.             string PostData,
  28.             string Charset,
  29.             string UserAgent,
  30.             string Referer,
  31.             CookieContainer  cookie)
  32.  
  33.  
  34.         {
  35.            
  36.             string sRet="";
  37.             try
  38.             {
  39.                
  40.                 if (Url == "" || Url == null) { return ""; }
  41.                 //默认编码为GB2312
  42.                 if (Charset == "" || Charset == null) { Charset = "GB2312"; }
  43.                 //默认客户端标示
  44.                 if (UserAgent == "" || UserAgent == null) { UserAgent = "Mozilla/4.0   (compatible;   MSIE   6.0;   Windows   NT   5.1)"; }
  45.                 //默认来路
  46.                 if (Referer == "" || Referer == null) { Referer = Url; }
  47.                 //提交方式转换为大写GET或者POST
  48.                 Method = Method.ToUpper();
  49.                 //定义接收对象
  50.                 HttpWebResponse response;
  51.                 //创建http请求对象
  52.                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);
  53.                 //设置cookie
  54.                 request.CookieContainer = cookie;
  55.                 //设置提交方式
  56.                 request.Method = Method;
  57.                 //设置客户端标示
  58.                 request.UserAgent = UserAgent;
  59.                 //设置来路
  60.                 request.Referer = Referer;
  61.                 //如果用POST方式提交
  62.                 if (Method == "POST")
  63.                 {
  64.                     byte[] postBytes = Encoding.UTF8.GetBytes(PostData);
  65.                     //设置提交内容类型
  66.                     request.ContentType = "application/x-www-form-urlencoded";
  67.                     //设置提交内容长度
  68.                     request.ContentLength = postBytes.Length;
  69.                     //设置提交内容
  70.                     Stream reqStream = request.GetRequestStream();
  71.                     reqStream.Write(postBytes, 0, postBytes.Length);
  72.                     reqStream.Close();
  73.  
  74.                 }
  75.                 response = (HttpWebResponse)request.GetResponse();
  76.                 Stream stream = response.GetResponseStream();
  77.                 StreamReader reader = new StreamReader(stream, Encoding.GetEncoding(Charset));
  78.                 sRet = reader.ReadToEnd();
  79.                 stream.Close();
  80.                 reader.Close();
  81.                 response.Close();          
  82.                 return sRet;
  83.             }
  84.             catch { return ""; }
  85.         }
  86.         #endregion
  87.  
  88.         #region GetHttpText获取网络文本代码,重载无Cookie
  89.         /// <summary>
  90.         /// GetHttpText获取网络文本代码,重载无Cookie
  91.         /// </summary>
  92.         /// <param name="Url">网址</param>
  93.         /// <param name="Method">提交方式,GET或者POST</param>
  94.         /// <param name="PostData">提交数据</param>
  95.         /// <param name="Charset">编码模式</param>
  96.         /// <param name="UserAgent">客户端标识</param>
  97.         /// <param name="Referer">来路</param>      
  98.         /// <returns>网络文本文件源代码</returns>
  99.         public string GetHttpText(
  100.             string Url,
  101.             string Method,
  102.             string PostData,
  103.             string Charset,
  104.             string UserAgent,
  105.             string Referer)
  106.         {
  107.             string sRet="";
  108.             sRet = GetHttpText(Url, Method, PostData, Charset, UserAgent, Referer, null);
  109.             return sRet;
  110.         }
  111.         #endregion
  112.     }
  113.    
  114. }

文章源自:明晨网络,明晨网络原创,《MySpider(C#)中的一个采集类的片段:下载获取网页》,http://www.mingchennet.com/tec/code/dotnet/5.htm