程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 數據采集程序(網頁小偷)點滴心得

數據采集程序(網頁小偷)點滴心得

編輯:.NET實例教程

所謂的數據采集程序也就是網頁小偷程序(大家別罵我哦),寫完了來這裡發點東西,希望大家有何高見共同研究.

1.在下載數據的開始,有些網站是要登錄了才能看到相應的數據,這個就需要我們發送登錄用戶名和密碼了,但我是登錄了,但他服務器也不是垃圾,在他那裡重定向了,共產生了2個SESSION,這第2個SESSION我就不知道如何捕抓.於是我就投機^-^,用軟件將SESSION捕抓下來了1個叫Ethereal的軟件,用以下代碼加入到HTTP請求的頭部
WebClient myWebClient = new WebClIEnt();
string sessionkey=textBox78.Text;
     string refererurl=textBox77.Text;
     myWebClIEnt.Headers.Clear();     
     myWebClient.Headers.Add("CookIE",sessionkey);
     myWebClIEnt.Headers.Add("Referer", refererurl);
     myWebClIEnt.Headers.Add("User-agent", "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031107 Debian/1.5-3");
這樣就欺騙了服務器了,哈哈

2.第二部就是代碼下載
byte[] myDataBuffer = myWebClIEnt.DownloadData(remoteUri);
 download = Encoding.Default.GetString(myDataBuffer);

3.第3部就是數據的匹配了,我是將流讀取到數據裡,然後用IndexOf得到2個關鍵字段的位置,然後用Substring取出來的,我知道這很笨,但用正則表達式難啊(誰會的指點我下),匹配完了得到的字符串我就用以下的函數去掉了Html代碼:
private string StripHTML(string strHtml)
  {
   string [] aryReg ={
          @"<script[^>]*?>.*?</script>",
          @"<(\/\s*)?!?((\w+:)?\w+)(\w+(\s*=?\s*(([""'])(\\[""'tbnr]|[^\7])*?\7|\w+)|.{0})|\s)*?(\/\s*)?>",
          @"([\r\n])[\s]+",
          @"&(quot|#34);",
          @"&(amp|#38);",
          @"&(lt|#60);",
          @"&(gt|#62);", 
          @"&(nbsp|#160);", 
          @"&(IExcl|#161);",
          @"&(cent|#162);",
          @"&(pound|#163);",
          @"&(copy|#169);",
          @"&#(\d+);",
          @"-->",
          @"<!--.*\n"         
         };

   string [] aryRep = {
           "",
           "",
           "",
           "\"",
           "&",
           "<",
;       ">",
           " ",
           "\xa1",//chr(161),
           "\xa2",//chr(162),
           "\xa3",//chr(163),
           "\xa9",//chr(169),
           "",
           "\r\n",
           ""
          };

   string newReg =aryReg[0];
   string strOutput=strHtml;
   for(int i = 0;i<aryReg.Length;i++)
   {
    Regex regex = new Regex(aryReg[i],RegexOptions.IgnoreCase );
    strOutput = regex.Replace(strOutput,aryRep[i]);
   
   }

   strOutput.Replace("<","");
   strOutput.Replace(">","");
   strOutput.Replace("\r\n","");


   return strOutput;
  }

4.到了後面就是入庫了,這個大家都懂了吧.但是我還有點問題就是,在我寫數據的時候,出了EXCEPTION,說我的字段太長了,不能寫進到數據庫,我用的是Access,我試驗下用SQL吧.

5.大家有什麼好的建議給我留個言賽.共同進步嘛.

出處:http://jetadv.cnblogs.com/archive/2006/02/18/333213.Html


    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved