WEB开发网
开发学院WEB开发ASP.NET 数据采集程序(网页小偷)点滴心得 阅读

数据采集程序(网页小偷)点滴心得

 2006-02-20 17:04:09 来源:WEB开发网   
核心提示:所谓的数据采集程序也就是网页小偷程序(大家别骂我哦),写完了来这里发点东西,希望大家有何高见共同研究.1.在下载数据的开始,有些网站是要登录了才能看到相应的数据,这个就需要我们发送登录用户名和密码了,但我是登录了,但他服务器也不是垃圾,在他那里重定向了,共产生了2个session,这第2个SESSION我就不知道如何捕

所谓的数据采集程序也就是网页小偷程序(大家别骂我哦),写完了来这里发点东西,希望大家有何高见共同研究.

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

Tags:数据采集 程序 网页

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接