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";
  • 相关阅读:
    发现个atan2的正确使用方式
    Forward+ Shading架构
    fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error 解决方案
    HDFS HA(高可用性)集群规划
    如何使用RTP引擎对语音编码进行转码
    关于 Angular 应用 tsconfig.json 中的 target 属性
    浅谈 Orbeon form builder 的权限控制
    关于 Angular 应用 tsconfig.json 中的 lib 属性
    orbeon form 通过 url 的方式同第三方应用集成的开发明细
    orbeon form 的配置介绍
  • 原文地址:https://www.cnblogs.com/barney/p/1070877.html
Copyright © 2011-2022 走看看