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";
  • 相关阅读:
    js,jquery小知识点
    httpd.conf中文祥解(转载)
    web_report_data_point(原创)
    用lr查看apache的服务情况
    检查链接的工具
    DNS缓存(转载)
    在linux下使用用Valgrind查找内存泄漏和无效内存访问(转载)
    初次接触php
    qtp 基础代码转载自51testing中的kai_top 网友。
    descriptive programming转载51testing 作者:周坚
  • 原文地址:https://www.cnblogs.com/barney/p/1070877.html
Copyright © 2011-2022 走看看