zoukankan      html  css  js  c++  java
  • 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";
  • 相关阅读:
    【LeetCode】Validate Binary Search Tree
    【LeetCode】Search in Rotated Sorted Array II(转)
    【LeetCode】Search in Rotated Sorted Array
    【LeetCode】Set Matrix Zeroes
    【LeetCode】Sqrt(x) (转载)
    【LeetCode】Integer to Roman
    贪心算法
    【LeetCode】Best Time to Buy and Sell Stock III
    【LeetCode】Best Time to Buy and Sell Stock II
    CentOS 6 上安装 pip、setuptools
  • 原文地址:https://www.cnblogs.com/barney/p/1070877.html
Copyright © 2011-2022 走看看