HttpWebRequest采集

其实web的采集就是要模仿出一个浏览器出来去访问http服务器,将获取到的html代码解析出来。

     在C#中有多个方法来实现HTML的request,可以使用WebClient,httpwebrequest还可以使用webbrowser;

 

这里只说使用httpwebrequest的实现。

    这里在采集上还要有一个技巧,有些网站的URL规则可能根本就不需求你先来采集分页的页面就能直接采集你想要的内容。如很多个网站都是采用ID来显示最后的路径,例:http://www.aaaa.com/a/show.php?id=111111

 

   这样的采集就是直接访问URL就是,总之一句话,只有先取到了想要采集的页面URL才能取到想要的东西(相当的废话。。。)

不多说,先来代码

C#代码   收藏代码
  1.  public abstract class WebControler  
  2.     {  
  3.         #region ConstString  
  4.         protected string sUserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";  
  5.         protected string sContentType = "application/x-www-form-urlencoded";  
  6.         protected string sRequestEncoding = "utf-8";  
  7.         protected string sResponseEncoding = "utf-8";  
  8.   
  9.         protected CookieContainer _cookieContainer = null;  
  10.         #endregion  
  11.         /// <summary>  
  12.         /// 了类中去继承,根据不同网站的验证方式实现登陆验证  
  13.         /// 以获取用户唯一标识的cookie  
  14.         /// </summary>  
  15.         protected virtual void CheckLogin()  
  16.         {  
  17.             _cookieContainer = new CookieContainer();  
  18.         }  
  19.   
  20.         /// <summary>  
  21.         /// 读取访问URL所返回的HTML字符串  
  22.         /// </summary>  
  23.         /// <param name="url"></param>  
  24.         /// <returns></returns>  
  25.         public static string GetHtmlFromUrl(string url)  
  26.         {  
  27.             CheckLogin() ;  
  28.             WebRequest request = WebRequest.Create(url);  
  29.             HttpWebRequest httpRequest = request as HttpWebRequest;  
  30.             if (httpRequest == null)  
  31.             {  
  32.                 throw new ApplicationException(  
  33.                string.Format("Invalid url string: {0}", url)  
  34.                );  
  35.             }  
  36.             //有些网站加入了限制,只有先从首页或验证页面访问才能访问,一般都记录到cookie中  
  37.            //这里就是将验证后的cookie容器赋给采集的client  
  38.             httpRequest.CookieContainer = _cookieContainer;  
  39.             httpRequest.UserAgent = sUserAgent;  
  40.             httpRequest.Accept = "*/*";  
  41.             httpRequest.Headers.Add("Accept-Language""zh-cn");  
  42.             httpRequest.KeepAlive = true;  
  43.             httpRequest.Timeout = 10000;  
  44.             httpRequest.Method = "GET";  
  45.   
  46.             HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse();  
  47.             string sResponse = string.Empty;  
  48.             if (response.StatusCode == HttpStatusCode.OK)  
  49.             {  
  50.                 using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("utf-8")))  
  51.                 {  
  52.                     sResponse = reader.ReadToEnd();  
  53.                     reader.Close();  
  54.                 }  
  55.             }  
  56.             response.Close();  
  57.             return sResponse;  
  58.         }  
  59.     }   

    如果碰到要验证的网站抓取,只要先继承下这个类,将CheckLogin()方法重写就是

    如果是可以直接采集的网站,一个循环就去采吧,将返回的字符串再自己解析,取出自己有用的数据即可。

    对于html的解析可以参考Smglreader


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值