`

随想:迅速取得海量数据之结构化数据

阅读更多

  呵呵,要想瞬间取得需要的数据,比如新闻信息,而且能够分门别类进行分析,我想是一件非常有意义的事情.而数据的来源只能来自于互联网,只有这样才有数据挖掘的研究基础.

  而互联网上的数据一般为不规则的数据,但也有规则的数据;从目前我看到过的搜索引擎当中,基于内容的搜索引擎一般都采取定向收集的方式,然后分析后放入到数据库当中,其中不凡有数据清洗的工作.

  规则的数据一般是以RSS为主的数据源,而不规则的数据采取定向收集的话,第一步就是抓取,然后通过模板,使用HtmlParse来进行分析,加入去重和数据清洗的功能,最后写入到数据库.当然,数据清洗也可能放到数据库后再做.

      这里,我就跟大家分享一下,抓取规则数据的一个过程,略加一些聚类的小菜.

  入口:一般通过搜索引擎或者指点网页进入.如下是操作步骤:

  1,打开http://g.cn,然后输入"新闻rss"进行查询,把你的搜索设置为每页为100条,这样是为了更容易的找到更多的结果,取得URL栏的地址:

http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&q=%E6%96%B0%E9%97%BBrss&revid=344741873&sa=X&ei=Ht3ITYqQF5GOvQO03NnjBQ&ved=0CJABENUCKAg

 

  2,使用Crawler4j来抓取数据,哥使用100个线程来''霸占''网络, ,代码如下:

 @Test
 public void crawByRss() throws Exception{
  CrawlController controller = new CrawlController("/data/crawl/root");
  controller.addSeed("http://www.google.com.hk/search?hl=zh-CN&newwindow=1&safe=strict&q=%E6%96%B0%E9%97%BBrss&revid=344741873&sa=X&ei=Ht3ITYqQF5GOvQO03NnjBQ&ved=0CJABENUCKAg");  
        controller.start(MyCrawler.class, 100);  
 }

 

   3,在抓取的每一个网页时,使用正则表达式分析其中的xml的链接.如下:

public class MyCrawler extends WebCrawler {
    public boolean shouldVisit(WebURL url) {
            return true;
    }
    public void visit(Page page) {
            String url = page.getWebURL().getURL(); 
      FileWriter fw1 = null;
   try {
    fw1 = new FileWriter("c:/today-rss"+"-20110509"+".txt", true);
    BufferedWriter bw1 = new BufferedWriter(fw1);
    bw1.write(printXml(page.getHTML()));
             bw1.close();
   } catch (IOException e) {    
    e.printStackTrace();
   }
      try {
    fw1.close();
   } catch (IOException e) {    
    e.printStackTrace();
   }
            List<WebURL> links = page.getURLs();  

    }
    private String printXml(String htmlStr){
     String returnStr = "";
     String urlsRegex="http://.*?\\.xml";
        String urls;
        Matcher mt2=Pattern.compile(urlsRegex).matcher(htmlStr);
        while(mt2.find())
        {
            urls=mt2.group().replaceAll("<a href=|>","");
            returnStr += urls+"\r\n";
        }
        return returnStr;
    }
}

 

   通过上面的我们知道,分析的结果放在c:/today-rss-20110509.txt,这里的结果并没有去重和处理,有很多不符合条件的记录,比如:

http://www.google.com/ig/addtoreader?feedurl=http://blog.sina.com.cn/rss/1134880297.xml

http://img.feedsky.com/images/icon_subshot02_google.gif" /</A<BR /</P<P&nbsp;<wbr<A HREF="http://reader.youdao.com/b.do?keyfrom=feedsky&amp;url=http://blog.sina.com.cn/rss/1286956544.xml

http://search.travel.sina.com.cn/api/wordmap.swf?xml=http://search.travel.sina.com.cn/api/flash_world.xml

 
  4,整理这些数据,并把分析的结果放在新的文本文件当中,以便来抓取.去重的基本思路使用HashSet,速度很快.

@Test
 public void checkInRssToday() throws IOException {
  String filePath = basepath + "today-rss-20110509.txt";
  String orgFilePath = "c:/today-rss" + "-20110509" + ".txt";
  FileReader fr = new FileReader(orgFilePath);
  HashSet hashSet = new HashSet();
  BufferedReader br = new BufferedReader(fr);
  String rssUrl = br.readLine();
  int kk =0;
  while (rssUrl != null) {
   kk++;
   System.out.println("正在处理第"+kk+"行");
   if (rssUrl.indexOf("?") != -1
     || rssUrl.indexOf("\"") != -1 || rssUrl.indexOf("\'") != -1){
    rssUrl = br.readLine();// 从文件中继续读取一行数据
    continue;
   }
   try {
    hashSet.add(rssUrl);
   } catch (Exception e) {
    rssUrl = br.readLine();// 从文件中继续读取一行数据
   }
   rssUrl = br.readLine();// 从文件中继续读取一行数据
  }
  Iterator ir = hashSet.iterator();
  FileWriter fw1 = new FileWriter(filePath, true);
  BufferedWriter bw1 = new BufferedWriter(fw1);
  while (ir.hasNext()) {
   bw1.write(ir.next().toString().trim() + "\r\n ");
  }
  bw1.close();
  fw1.close();
 }

 

    通过以上4步,我们在大约10分钟的时间里,可以取得831条有效结果,当然了,如果你的网速比我的快,你的机器比我好,哪应该超过这个数.

 5,通过Rome来分析RSS的Title,然后模糊匹配分类,致于分类,大家可以通过新浪和搜狐的分类,然后来进行模糊匹配.

 6.通过Rome来分析RSS,然后放在MongoDB,呵呵,海量的数据,我只信任MongoDB,超级鄙视Sql Server,

@Test
 public void getDataFromRss() throws IOException {
  String filePath = basepath + "today-rss" + "-20110509" + ".txt";  
  FileReader fr = new FileReader(filePath);  
  BufferedReader  br=new BufferedReader(fr);
  String rssUrl=br.readLine();
  SyndFeedInput input = new SyndFeedInput(); 
  
  while (rssUrl != null) {
   System.out.println("正在分析网站:" + rssUrl);
   try {
    SyndFeed feed = input.build(new XmlReader(new URL(rssUrl)));
    String descFeed = feed.getTitle();
    List<SyndEntry> syndEntrys = feed.getEntries();
    saveInDb(syndEntrys);
   } catch (Exception e) {
    rssUrl = br.readLine();// 从文件中继续读取一行数据
   }
   rssUrl = br.readLine();// 从文件中继续读取一行数据
  }
  br.close();//关闭BufferedReader对象
  fr.close();//关闭文件 
 }

 

   如上是基本的随想,在实际的开放当中,我想要涉及到的知识有:

灵活的调度基础
N多的线程池,N多的抓取服务,
增量抓取的技巧,
自动分类功能
数据挖掘之趋势分析,热点分析..........
 做为一个懒人,我把刚刚拿到的数据,分析了最新的文本聚类,小Show一下,呵呵.

中美三轮(17)
 标题为: 第三轮中美战略与经济对话今开启 主谈四大议题,ID为4dc8168a7ff6c7a8012be13e
 标题为: 第三轮中美战略与经济对话今开幕 汇率仍唱重头戏,ID为4dc8168a7ff6c7a8012be137
 标题为: 中美对话今日开幕 扩大投资成焦点话题,ID为4dc8168a7ff6c7a8012be13d
 标题为: 第三轮中美战略与经济对话在华盛顿开幕,ID为4dc8168a7ff6c7a8012be0c9
 标题为: 第三轮中美战略与经济对话在华盛顿开幕,ID为4dc8168a7ff6c7a8012be0ce
 标题为: 第三轮中美战略与经济对话在华盛顿开幕,ID为4dc8168a7ff6c7a8012be0d1
 标题为: 第三轮中美战略与经济对话开幕 汇率唱重头戏,ID为4dc816a87ff6c7a8012be917
 标题为: 旺报 中美建构共同领导伙伴 此其时矣,ID为4dc819cf7ff6c7a8012c6338
 标题为: BBC 第三轮中美战略经济对话即将展开,ID为4dc819cf7ff6c7a8012c633b
 标题为: 中美将讨论促贸易投资合作 互利关系将深化,ID为4dc818d57ff6c7a8012c3748
 标题为: 中美双方在汇率问题上已达成共识,ID为4dc818d57ff6c7a8012c3751
 标题为: 瑞银高管:中美协商为全球治理提供好范式,ID为4dc818d57ff6c7a8012c375d
 标题为: 中美直接投资成两国利益博弈的焦点,ID为4dc819d57ff6c7a8012c64a1
 标题为: 高考第三轮复习你需要做什么?,ID为4dc81b7f7ff6c7a8012c9da2
 标题为: 高考三轮复习三大环节保证提高生物分数(图),ID为4dc81b7f7ff6c7a8012c9db4
 标题为: 旺报 中美建构共同领导伙伴 此其时矣,ID为4dc81b977ff6c7a8012c9ddb
 标题为: BBC 第三轮中美战略经济对话即将展开,ID为4dc81b977ff6c7a8012c9dde
 -------------------------------------------------------------------------------
母亲节(16)
 标题为: 曾荫权网贺母亲节 忆儿时为母买鸭腿,ID为4dc819d57ff6c7a8012c637b
 标题为: 给母亲,ID为4dc817027ff6c7a8012bf453
 标题为: 母亲节温哥华订花减少 酒楼订位少3成,ID为4dc8179d7ff6c7a8012c0c8e
 标题为: 中领馆庆母亲节慈恩洋溢,ID为4dc817ef7ff6c7a8012c1e19
 标题为: 初一女生疑父亲有外遇在母亲节上吊自杀,ID为4dc818be7ff6c7a8012c3237
 标题为: 普通人孝敬母亲的不同方式(组图),ID为4dc818c97ff6c7a8012c33ee
 标题为: 百名香港义工母亲节出发赴四川参与灾后重建,ID为4dc818d67ff6c7a8012c377f
 标题为: 母亲节香港零售业卖气旺 商场生意增逾两成,ID为4dc818d67ff6c7a8012c3781
 标题为: 母亲节 子女讲心又讲金,ID为4dc819d57ff6c7a8012c63d7
 标题为: 以母亲节的名义加收10%服务费,ID为4dc819d57ff6c7a8012c63fa
 标题为: 高墙内 向母亲下跪献花,ID为4dc819d57ff6c7a8012c6432
 标题为: “感谢母亲把我从深渊边拉回”,ID为4dc819d57ff6c7a8012c6437
 标题为: 母亲节 商家大打“亲情牌”,ID为4dc819d57ff6c7a8012c6439
 标题为: 母亲的别样人生,ID为4dc819d57ff6c7a8012c6449
 标题为: 母亲节,忧郁母亲坠楼身亡,ID为4dc819d57ff6c7a8012c64d3
 标题为: 患癌母亲在母亲节病逝捐眼角膜 称要看女儿长大,ID为4dc81b767ff6c7a8012c9be2
 -------------------------------------------------------------------------------
预期,一致(13)
 标题为: 一致预期:4月新增人民币贷款额6788.9亿元,ID为4dc8168a7ff6c7a8012be10b
 标题为: 一致预期:4月PPI同比增速7.1%,ID为4dc8168a7ff6c7a8012be10e
 标题为: 房产税百日冷场 全面推广预期加重,ID为4dc8168a7ff6c7a8012be158
 标题为: 一致预期:4月份社会消费品零售总额同比增长17.4%,ID为4dc8168a7ff6c7a8012be0ed
 标题为: 一致预期:4月份规模以上工业增加值同比增长14.6%,ID为4dc8168a7ff6c7a8012be0ef
 标题为: 一致预期:4月贸易顺差28.9亿美元,ID为4dc8168a7ff6c7a8012be0f3
 标题为: 一致预期:4月出口同比增速为28.8%,ID为4dc8168a7ff6c7a8012be0f4
 标题为: 一致预期:4月进口同比增速为28.6%,ID为4dc8168a7ff6c7a8012be0fa
 标题为: 一致预期:4月末M2同比增长16.6%,ID为4dc8168a7ff6c7a8012be104
 标题为: 一致预期:4月CPI同比增速5.2%,ID为4dc8168a7ff6c7a8012be110
 标题为: 一致预期:4月新增人民币贷款额6788.9亿元,ID为4dc8168a7ff6c7a8012be0ee
 标题为: 一致预期:1-4月累计城镇固定资产投资同比增速24.7%,ID为4dc8168a7ff6c7a8012be0f0
 标题为: 一致预期:4月末M1同比增长15%,ID为4dc8168a7ff6c7a8012be109
 -------------------------------------------------------------------------------
网络安全,海事(13)
 标题为: 打好WEB服务器安全攻坚战,ID为4dc816817ff6c7a8012bdfbc
 标题为: 希捷推网络存储路由器 可搭建家庭云,ID为4dc816ab7ff6c7a8012be95d
 标题为: 打好WEB服务器安全攻坚战,ID为4dc816ab7ff6c7a8012be96b
 标题为: 美媒 网络安全与海事分歧成美中对话焦点,ID为4dc819cf7ff6c7a8012c6339
 标题为: 中美军方要谈网络安全和海事,ID为4dc817eb7ff6c7a8012c1c9b
 标题为: [转载]做一个受人尊敬的网络直销人,ID为4dc817f17ff6c7a8012c1e34
 标题为: 核电安全议题将纳入两岸第七次陈江会协商,ID为4dc819df7ff6c7a8012c67e4
 标题为: 希捷推网络存储路由器 可搭建家庭云,ID为4dc81b367ff6c7a8012c90ba
 标题为: 安全浏览器 SRWare Iron,ID为4dc81b737ff6c7a8012c9b1b
 标题为: 美媒 网络安全与海事分歧成美中对话焦点,ID为4dc81b977ff6c7a8012c9ddc
 标题为: 解读:夫妻网络巧调情更给力,ID为4dc81b9c7ff6c7a8012ca057
 -------------------------------------------------------------------------------
苹果,收购(13)
 标题为: 北京苹果店外国人棒打排队者续:赔偿两万,ID为4dc816877ff6c7a8012be0b8
 标题为: 苹果欲收购Nuance 开发语音识别引擎,ID为4dc816ab7ff6c7a8012be960
 标题为: 北京苹果店外国人棒打排队者续:赔偿两万,ID为4dc817aa7ff6c7a8012c0e0a
 标题为: 苹果程序店造就中国新企业家,ID为4dc817ef7ff6c7a8012c1e18
 标题为: Nvidia以3.6亿美元收购手机芯片商Icera,ID为4dc819107ff6c7a8012c3c33
 标题为: eBay即将提前完成对GSI收购,ID为4dc819107ff6c7a8012c3c36
 标题为: 苹果店与被打者达成调解 负责人动粗赔两万,ID为4dc819647ff6c7a8012c5189
 标题为: 英伟达公司收购基带和射频技术厂商Icera,ID为4dc819837ff6c7a8012c5a0d
 标题为: Pcworld总结苹果iTunes十弊端:更新烦运行慢,ID为4dc819837ff6c7a8012c5a14
 标题为: 苹果品牌价值1530亿,夺走谷歌的第一名位置,ID为4dc819837ff6c7a8012c5a19
 标题为: 英特尔与ARM:谁能赢得苹果“芯”?,ID为4dc819837ff6c7a8012c5a2c
 标题为: i7四核6750独显 苹果MBP新平台本13700,ID为4dc81ab97ff6c7a8012c7e13
 标题为: 苹果欲收购Nuance 开发语音识别引擎,ID为4dc81b367ff6c7a8012c90bb

 

   哈哈,发现这样的价值很无穷,比如随时生成垃圾网站,哈哈,我想最好的是做google的新闻模块,当然了,有眼光的哥们也可以这样做相同的模块,做专题出来,肯定能胜过Google新闻!

 

 

分享到:
评论
5 楼 funing 2011-12-03  
请问能给个完整的项目文件么?谢了zihuangning@gmail.com
4 楼 heweiya 2011-05-12  
zhzhl202 写道
“我们在大约10分钟的时间里,可以取得831条有效结果”
这个速度是不是有点慢了,是因为用HashSet去重的原因还是因为网速慢?

怎么说呢,这个跟网络环境,硬件配置有关,我说的是831条有效的结果,也就是去重后的最终结果。呵呵。。。
3 楼 zhzhl202 2011-05-12  
用HashSet发现果然很快,可是不知道用HashSet的话,把这些url全部放在内容中,最多能支持多少数据才不会发生溢出呢
2 楼 zhzhl202 2011-05-12  
“我们在大约10分钟的时间里,可以取得831条有效结果”
这个速度是不是有点慢了,是因为用HashSet去重的原因还是因为网速慢?
1 楼 zhzhl202 2011-05-12  
不错,前些日子我也也借助也百度、google搜索抓取数据,用的是htmlparser来解析搜索引擎的结果页,从而得到链接的。

其中url过滤用的是正则表达式,当初去重也一直没想到快的很快的方法,看它你的去重方法有点灵感了,ths

相关推荐

    编程随想:Java新手的通病.docx

    首先,我们来看第一个通病:对算法和数据结构的不熟悉。算法和数据结构是编程的基础,无论使用哪种语言,它们都是解决问题的关键。许多Java新手可能在大学期间没有深入学习这部分内容,或者转行后没有进行足够的基础...

    安全随想:从紧螺丝说起.docx

    这篇文档通过“安全随想:从紧螺丝说起”的标题,揭示了一个深刻的道理,即安全工作中的每一个细节都不可忽视。文中以继电保护工作者的日常工作为例,强调了检查和紧固螺丝这一看似微不足道的任务对整个系统稳定运行...

    读书随想:读书能带来什么.doc

    标题和描述中提到的“读书随想:读书能带来什么”是一个探讨阅读价值的主题,而标签中的“资料”和“范文”暗示这是一个关于读书的重要性和影响的论述。以下是基于这些信息详细阐述的读书相关知识点: 1. **知识的...

    代码随想录:全面解析二叉树理论与应用实例

    内容概要:本文来自《代码随想录》,详尽探讨了有关二叉树的各类知识。包含了二叉树的种类(满二叉树、完全二叉树)、平衡树、遍历方式及其实现代码,涵盖了深度与广度两种不同的搜索策略以及非递归的方法。本文适用...

    软件随想录:程序员部落酋长Joel谈软件

    ### 软件随想录:程序员部落酋长Joel谈软件 #### 一、书籍简介与背景 《软件随想录》是一本由Joel Spolsky所著的著作,该书以其深刻的见解和独特的视角在全球范围内影响了无数程序员。Joel Spolsky是一位在软件...

    内网渗透随想 作者:未知.pdf

    内网渗透随想 作者:未知

    随想出题随想出题免费版

    总的来说,随想出题免费版是一个实用的教学辅助工具,它通过智能化的试题生成和管理,降低了教学工作的负担,提高了教学质量,对于提升学习效果有积极的促进作用。无论是教师用于出卷,还是学生自我检测,都是一个...

    代码随想录算法PDF.rar

    1. **基础数据结构**:数组、链表、栈、队列、树(二叉树、平衡树如AVL和红黑树)、图等基本数据结构的定义、操作和实现。理解这些数据结构是解决算法问题的基础。 2. **排序与查找算法**:冒泡排序、选择排序、...

    代码随想录的pdf版本,需要准备秋招的小伙伴们看过来呀!

    了解这些查找方法,可以帮助你在海量数据中高效定位信息。 4. **图论**:深度优先搜索(DFS)、广度优先搜索(BFS)、最小生成树(Prim或Kruskal)、最短路径(Dijkstra或Floyd)。图论在解决网络、路由、社交网络...

    代码随想录+刷题笔记记录

    刷题笔记记录是代码随想录提供的一个非常实用的功能,可以帮助用户更好地学习和掌握算法和数据结构知识。希望本文对读者有所帮助,让大家更好地利用代码随想录进行学习和提高。# 刷题笔记介绍 这篇文档是关于刷题...

    代码随想录算法PDF.zip

    在《代码随想录》中,作者详细介绍了常见算法问题的解决思路和方法,涵盖了数据结构、排序算法、搜索算法等多个方面。以下是书中的部分关键知识点: 1. **基础数据结构**:包括数组、链表、栈、队列、哈希表、树...

    软件随想录:程序员部落酋长Joel谈软件

    《软件随想录:程序员部落酋长Joel谈软件》是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为 36讲,每一讲都是...

    「代码随想录」二叉树专题精讲(v2.0).pdf

    对于想要学习数据结构与算法,尤其是二叉树相关内容的程序员来说,这门课程是一份非常好的学习资料。总的来说,「代码随想录」二叉树专题精讲(v2.0)内容详实,讲解深入浅出,适合各种水平的程序员学习。

    《代码随想录》LeetCode 刷题攻略:200道经典题目刷题顺序,共60w字的详细图解,视频难点剖析,50余张思维.zip

    这本书包含了200道精心挑选的经典题目,覆盖了数据结构、算法、设计模式等多个方面,总计约60万字的详细解析,配以丰富的图形解释和视频难点剖析,以及50多张思维导图,为学习者提供了全方位的学习支持。 1. **...

    软件随想录 软件随想录

    作者通过一系列的随笔和思考,揭示了软件开发过程中的关键问题、挑战以及解决之道。下面,我们将详细探讨其中蕴含的知识点。 1. **软件开发的本质**:书中首先强调了软件开发不仅是技术问题,更是管理问题。软件的...

    代码随想录:哈希表的应用与优化

    主要内容概述:文章全面介绍了哈希表的基本概念、常见的哈希结构(如哈希表、Set、Map)、典型应用场景,以及详细的哈希法运用实例,对比不同数据结构解决实际问题的效果,包括数组作为哈希表、Set和Map在实际问题中...

    《代码随想录》最新PDF全集整理发布

    内容概要:这是关于作者针对自己的代码学习笔记《代码随想录》,进行两年后的全面更新与汇总的一则公告。新的PDF版本整合了所有最新内容,并修复和完善了一系列题目解释。尽管如此,作者仍推荐优先在网站上阅读以...

    编程随想博客文集 2010

    编程随想博客文集 2010

Global site tag (gtag.js) - Google Analytics