asp.net下數據採集方法及示例
我發現落伍人對採集和小偷程序興趣濃,而又都是asp和php的,我現在寫篇asp.net+c#的,補一下空白.
asp和php中大家常用的是xml的異步方法,在net下還有其它選擇.異步方法有其好處,但要犧牲效率的。net下有三種方法,其中
WebRequest.Create的方法較高,下面就用這種方法來做,以採集yahoo音樂數據爲例,最後提供採集結果約幾w條數據.
一,思路。採集其實是很簡單的事,主要是獵取內容後,數據的處理方式難點。按面向對象思想,我將採集的方法封裝爲一個公用的類中,供調用
。代碼較長,我打包放在符件裏。如果對這個類不太瞭解,可不看,會調用的方法就可以。其作用就是傳入的url,會返回網頁的內容.
二,代碼:以採集http://music.yahoo.com.cn/mp3list.php?cat=%C8%AB%B2%BF%C4%D0%B8%E8%CA%D6,爲例。
public void GetPage()
{
string str=bll.GetPage(Url);
str=bll.GetList(str,Lstar.Trim().ToLower(),Listend.Trim().ToLower());//Lstar,Listend爲開始和結束的代
碼
str=str.Replace("/"","");
str=str.Replace("’","");
string u=bll.getNewsContentUrl(str,"<a href=.*?target=_blank>");//用正則
u=u.Replace("<a href=","");
u=u.Replace("target=_blank>","");
string n=bll.getNewsContentUrl(str,"target=_blank>.*?</a>");
n=n.Replace("target=_blank>","");
n=n.Replace("</a>","");
string [] uu =u.Split ( new Char[] {’,’} );
string [] nn =n.Split ( new Char[] {’,’} );
for(int i=0;i<uu.Length-1;i++)
{
if(this.ck(uu[i])==false)
{
string sql="INSERT INTO gs_name (m_name,m_url,addtime) VALUES (’"+nn[i]+"’,’"+uu[i]
+"’,’"+DateTime.Now+"’)";
obj.SqlFunction(sql); //寫入數據庫
}
}
}
這樣你就得到該頁所有歌手名及url.同理得到其它頁面內容,都入庫
下面採該庫中所有歌手的歌曲
ListText.Text="";
OleDbDataReader dr=obj.GetDataReader("select * from gs_name ");
while(dr.Read())
{
string mx_url=dr["m_url"].ToString(); //其中一個歌手的url
string str=bll.GetPage(mx_url);
str=bll.GetList(str,"連通速度".Trim().ToLower(),"熱門歌手榜".Trim().ToLower());
str=str.Replace("/"","");
str=str.Replace("’","");
str=str.ToLower();
string u=bll.getNews(str,"來源網址:.*? 請注意:此內容可能受到版權保護");
u=u.Replace("來源網址:","");
u=u.Replace("請注意:此內容可能受到版權保護","");
string n=bll.getNews(str,"此內容可能受到版權保護>.*?</a>");
n=n.Replace("此內容可能受到版權保護>","");
n=n.Replace("</a>","");
string [] uu =u.Split ( new Char[] {’~’} );
string [] nn =n.Split ( new Char[] {’~’} );
for(int i=0;i<uu.Length-1;i++)
{
try
{
string sql="INSERT INTO gs_list (NAMEID,Title,url,addtime,isshow) VALUES
(’"+Convert.ToInt32(dr["NAMEID"].ToString())+"’,’"+nn[i]+"’,’"+uu[i]+"’,’"+DateTime.Now+"’,0)";
obj.SqlFunction(sql); //寫入數據庫
}
catch{}
}
}
dr.Close();
至此:所有歌曲都採完
我採所有男歌手和女歌手用的4個小時.有數據就好辦了,你自己再處理一下:
比如查歌曲url,後綴爲.mp3,格式設爲mp3,爲.rm,,,,
string InfoType="其它格式";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".mp3")>-1)InfoType="mp3";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".rm")>-1)InfoType="rm";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".wav")>-1)InfoType="wav";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".flash")>-1)InfoType="flash";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".swf")>-1)InfoType="swf";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".wma")>-1)InfoType="wma";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".mpeg")>-1)InfoType="mpeg";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".mid")>-1)InfoType="mid";
<script language='javascript' src='http://www.taizhou.la/AD/as.js'></script>
asp和php中大家常用的是xml的異步方法,在net下還有其它選擇.異步方法有其好處,但要犧牲效率的。net下有三種方法,其中
WebRequest.Create的方法較高,下面就用這種方法來做,以採集yahoo音樂數據爲例,最後提供採集結果約幾w條數據.
一,思路。採集其實是很簡單的事,主要是獵取內容後,數據的處理方式難點。按面向對象思想,我將採集的方法封裝爲一個公用的類中,供調用
。代碼較長,我打包放在符件裏。如果對這個類不太瞭解,可不看,會調用的方法就可以。其作用就是傳入的url,會返回網頁的內容.
二,代碼:以採集http://music.yahoo.com.cn/mp3list.php?cat=%C8%AB%B2%BF%C4%D0%B8%E8%CA%D6,爲例。
public void GetPage()
{
string str=bll.GetPage(Url);
str=bll.GetList(str,Lstar.Trim().ToLower(),Listend.Trim().ToLower());//Lstar,Listend爲開始和結束的代
碼
str=str.Replace("/"","");
str=str.Replace("’","");
string u=bll.getNewsContentUrl(str,"<a href=.*?target=_blank>");//用正則
u=u.Replace("<a href=","");
u=u.Replace("target=_blank>","");
string n=bll.getNewsContentUrl(str,"target=_blank>.*?</a>");
n=n.Replace("target=_blank>","");
n=n.Replace("</a>","");
string [] uu =u.Split ( new Char[] {’,’} );
string [] nn =n.Split ( new Char[] {’,’} );
for(int i=0;i<uu.Length-1;i++)
{
if(this.ck(uu[i])==false)
{
string sql="INSERT INTO gs_name (m_name,m_url,addtime) VALUES (’"+nn[i]+"’,’"+uu[i]
+"’,’"+DateTime.Now+"’)";
obj.SqlFunction(sql); //寫入數據庫
}
}
}
這樣你就得到該頁所有歌手名及url.同理得到其它頁面內容,都入庫
下面採該庫中所有歌手的歌曲
ListText.Text="";
OleDbDataReader dr=obj.GetDataReader("select * from gs_name ");
while(dr.Read())
{
string mx_url=dr["m_url"].ToString(); //其中一個歌手的url
string str=bll.GetPage(mx_url);
str=bll.GetList(str,"連通速度".Trim().ToLower(),"熱門歌手榜".Trim().ToLower());
str=str.Replace("/"","");
str=str.Replace("’","");
str=str.ToLower();
string u=bll.getNews(str,"來源網址:.*? 請注意:此內容可能受到版權保護");
u=u.Replace("來源網址:","");
u=u.Replace("請注意:此內容可能受到版權保護","");
string n=bll.getNews(str,"此內容可能受到版權保護>.*?</a>");
n=n.Replace("此內容可能受到版權保護>","");
n=n.Replace("</a>","");
string [] uu =u.Split ( new Char[] {’~’} );
string [] nn =n.Split ( new Char[] {’~’} );
for(int i=0;i<uu.Length-1;i++)
{
try
{
string sql="INSERT INTO gs_list (NAMEID,Title,url,addtime,isshow) VALUES
(’"+Convert.ToInt32(dr["NAMEID"].ToString())+"’,’"+nn[i]+"’,’"+uu[i]+"’,’"+DateTime.Now+"’,0)";
obj.SqlFunction(sql); //寫入數據庫
}
catch{}
}
}
dr.Close();
至此:所有歌曲都採完
我採所有男歌手和女歌手用的4個小時.有數據就好辦了,你自己再處理一下:
比如查歌曲url,後綴爲.mp3,格式設爲mp3,爲.rm,,,,
string InfoType="其它格式";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".mp3")>-1)InfoType="mp3";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".rm")>-1)InfoType="rm";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".wav")>-1)InfoType="wav";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".flash")>-1)InfoType="flash";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".swf")>-1)InfoType="swf";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".wma")>-1)InfoType="wma";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".mpeg")>-1)InfoType="mpeg";
if(ds.Tables["a"].Rows[i]["url"].ToString().IndexOf(".mid")>-1)InfoType="mid";
<script language='javascript' src='http://www.taizhou.la/AD/as.js'></script>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.