现在位置首页 / 开源代码 /正文

百度风云榜数据采集工具

作者: IT小兵 | 2013年6月14日| 热度:℃ | 评论: |参与:

一个朋友求我帮个忙,做个程序,把百度风云榜的数据采集下来,他用来参考做一些数据分析和挖掘。

作为一个程序员,就是懒啊。咱不能人工去做,所以就开发了这个小工具。

使用C#,winform,+HtmlAgilityPack。

HtmlAgilityPack是一个html解析器。非常好用。下一篇进行详细的说明。


步骤:

1.首先要分析百度风云榜的代码结构。分清楚那是htm元素是我们需要监控和采集的。

从首页读取出document元素根。

               HtmlAgilityPack.HtmlWeb hw = new HtmlAgilityPack.HtmlWeb();

               hw.AutoDetectEncoding =true;

                url="http://top.baidu.com/boards";

               HtmlAgilityPack.HtmlDocument doccc = hw.Load(url);


分析那些html元素代表了风云榜的数据:

这里面用到了xpath语法。大家可以自行学习一下。

"//div[@class='all-list']":取出class是all-list的div。//div是指所有符合的都出来。

  private void GetHrefs(HtmlAgilityPack.HtmlDocument _doc)

       {

           

           HtmlNodeCollection hrefs = _doc.DocumentNode.SelectNodes("//div[@class='all-list']");

           if (hrefs == null)

               return  ;


           foreach (HtmlNode href in hrefs)

           {

               HtmlNodeCollection typee = href.SelectNodes(".//div[@class='hd']");

               if (typee.Count>0)

               {

             

               BaiduGuanJIanzi guanjian = new BaiduGuanJIanzi();

           

                   string title= typee[0].InnerText.Replace("\r", "").Replace("\n", "").Replace(" ", "").Trim();

                   HtmlNodeCollection links=null;


                   if (title == "娱乐")

               {

                   links = href.SelectNodes(".//div[@class='links']/p//a");

                   guanjian.DaLei = title;

                   links = href.SelectNodes(".//div[@class='links']//a");

                   if (links == null) { continue; }

                   foreach (HtmlNode aa in links)

                   {

                       GuanJianZi zilei = new GuanJianZi();

                       zilei.Word = aa.InnerText;

                       if (zilei.Word.Trim() == "全部"

                           || zilei.Word.Trim() == "电影"

                           || zilei.Word.Trim() == "电视剧"

                           || zilei.Word.Trim() == "综艺"

                           || zilei.Word.Trim() == "动漫"

                           )

                       {

                           continue;

                       }

                       zilei.Desc = "";

                       zilei.Urll = "http://top.baidu.com" + aa.Attributes["href"].Value;

                       guanjian.GuanJIanZi.Add(zilei);

                   }

                   ListBaiduGuanjianzi.Add(guanjian);

               }

               else

               {

                   guanjian.DaLei = title;

                   links = href.SelectNodes(".//div[@class='links']//a");

                   if (links == null) { continue; }

                   foreach (HtmlNode aa in links)

                   {

                       GuanJianZi zilei = new GuanJianZi();

                       zilei.Word = aa.InnerText;

                       if (zilei.Word.Trim() == "全部")

                       {

                           continue;

                       }

                       zilei.Desc = "";

                       zilei.Urll = "http://top.baidu.com" + aa.Attributes["href"].Value;

                       guanjian.GuanJIanZi.Add(zilei);

                   }

                   ListBaiduGuanjianzi.Add(guanjian);

                 }

               }

             

           }


       }




2.根据分析出来的数据,获取关键字和链接:

取出标题和描述信息。把这些信息保存到txt中即可。

private ArrayList GetSubContent(HtmlAgilityPack.HtmlDocument _doc,string weburl,GuanJianZi zilei)

       {

           Images = new ArrayList();

           HtmlNodeCollection hrefs = _doc.DocumentNode.SelectNodes("//a[@class='list-title']");

     

           if (hrefs == null)

           {

               

               return new ArrayList();

           }


           foreach (HtmlNode href in hrefs)

           {

               try

               {

                   string title = href.InnerText.Replace("\r", "").Replace("\n", "").Replace("search;", "").Replace(" ", "").Trim();

                   if (title.Length > 1)

                   {

                       ReDian rdd = new ReDian();

                       rdd.Word = title;

                       rdd.Urll = "http://top.baidu.com" + href.Attributes["href"].Value;

                       HtmlAgilityPack.HtmlWeb hw = new HtmlAgilityPack.HtmlWeb();

                       HtmlAgilityPack.HtmlDocument doccc = hw.Load(rdd.Urll);

                       if (doccc!=null&& doccc.DocumentNode.SelectNodes("//div[@class='related-news']") != null

                           && doccc.DocumentNode.SelectNodes("//div[@class='related-news']").Count > 0)

                       {

                           rdd.Desc = doccc.DocumentNode.SelectNodes("//div[@class='related-news']")[0].InnerText;

                       }

                       ShowLogMsg("内容:" + rdd.Word + rdd.Desc);

                       zilei.ReDianList.Add(rdd);

                   }

               }

               catch (Exception ex)

               {

                   ShowLogMsg("LoadSubURL neirong" + ex.Message + ex.StackTrace);

               }

           }

           return Images;

       }



总结:

1.选择一个好的分析工具是很关键的。原来我都是用webbrowser分析,又慢又出现内存错误,还会出现分析错误,重构和修改都很麻烦。

参考: [.net下使用GeckoWebBrowser步骤]

2.互联网的世界任何东西都应该是免费的,可以自由分享的。

点击阅读本文所属分类的更多文章: 开源代码 。和高手一起交流:346717337
友荐云推荐

未注明转发、原文均为本站原创。分享本文请注明 原文链接

给您更多信息和帮助

在这里您可以找到更多:

技术交流群:346717337 Jquery插件交流

投稿:suchso@vip.qq.com

承接:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/业务咨询

抢天猫双11红包
推荐使用阿里云服务器
echarts教程系列
本月最热文章

微信扫一扫,徜徉悠嘻网,您的休闲乐园

微信公众号:快乐每一天

随机文章
标签

技术交流群:346717337

投稿:suchso@vip.qq.com

专业专注:企业网站门户/微网站/微商城/CMS系统/微信公众号运营/付费问题咨询