所謂的資料擷取程式也就是網頁小偷程式(大家別罵我哦),寫完了來這裡發點東西,希望大家有何高見共同研究.
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 *)?>",
@"([rn])[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),
"",
"rn",
""
};
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("rn","");
return strOutput;
}
4.到了後面就是入庫了,這個大家都懂了吧.但是我還有點問題就是,在我寫數據的時候,出了EXCEPTION,說我的字段太長了,不能寫進到數據庫,我用的是ACCESS, 我試驗下用SQL吧.
5.大家有什麼好的建議給我留個言賽.共同進步嘛.
來源:http: //jetadv.cnblogs.com/archive/2006/02/18 /333213.html