网络爬虫(源代码)

public class Spider implements Runnable {
        private ArrayList urls; //URL列表
    private HashMap indexedURLs; //已经检索过的URL列表
    private int threads ; //初始化线程数   
    public static void main(String argv[]) throws Exception {
        if(argv[0] == null){
           System.out.println("Missing required argument: [Sit URL]";
           return ;
         }
                Spider Spider = new Spider(argv[0]);
                Spider.go();
    }
    public Spider(String strURL) {
           urls    = new ArrayList();
        threads = 10;
        urls.add(strURL);
        threadList = new ArrayList();
        indexedURLs = new HashMap();
        if (urls.size() == 0)
            throw new IllegalArgumentException("Missing required argument: -u [start url]";
        if (threads < 1)
            throw new IllegalArgumentException("Invalid number of threads: " +
                threads);
    }
    public void go(String strURL) throws Exception {
        // index each entry point URL
        long start = System.currentTimeMillis();
        for (int i = 0; i < threads; i++) {
            Thread t = new Thread(this, "Spide " + (i+1));
            t.start();
            threadList.add(t);
        }
        while (threadList.size() >; 0) {
            Thread child = (Thread)threadList.remove(0);
            child.join();
        }
        long elapsed = System.currentTimeMillis() - start;
    }
    public void run() {
        String url;
        try {
            while ((url = dequeueURL()) != null) {
                indexURL(url);
            }
        }catch(Exception e) {
                logger.info(e.getMessage());
        }       
    }
    //检测URL列表容器中有没有URL没有被解析,如果有则返回URL由线程继续执行
   
    public synchronized String dequeueURL() throws Exception {
        while (true) {
            if (urls.size() >; 0) {
                return (String)urls.remove(0);
            }else {
                threads--;
                if (threads >; 0) {
                     wait();
                    threads++;
                }else {
                    notifyAll();
                    return null;
                }
            }
        }
    }
    /*
     * 添加URL和当前URL的级数,并唤醒睡眠线程    
     */
    public synchronized void enqueueURL(String url,int level) {
        if (indexedURLs.get(url) == null) {
            urls.add(url);
            indexedURLs.put(url, new Integer(level));
            notifyAll();
        }
    }
    /**
     * 通过URL解析出网页内容并解析出页面上的URL
     * @param url 页面链接
     * @throws java.lang.Exception
     */
    private void indexURL(String url) throws Exception {
        boolean flag = true ;
       //判断网页链接的级别,系统默认为三级
        int level = 1 ;
        if (indexedURLs.get(url) == null) {
           indexedURLs.put(url, new Integer(level));
        }else{
           level = ((Integer)indexedURLs.get(url)).intValue();
           //只检测到页面的第二级
           if(level >; 2 )
             return ;
           level++ ;
        }
        String strBody = null ;
        try{
                //解析页面内容
                strBody = loadURL(url);
        }catch(Exception e){
                return ;
        }
        if (strBody != null) {
          String urlGroups[] = null ;
         try{
                  //解析出页面所以URL
                  urlGroups = parseURLs(summary);
          }catch(Exception e){
                  logger.info(e.getMessage());
          }
          if(urlGroups == null)
                  urlGroups = new String[0] ;
                 
          strBody = null ;
          for (int i = 0; i < urlGroups.length; i++) {
                enqueueURL(urlGroups,level);
          }
        }
    }
}
[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:Sosoo1.0网络爬虫程序
下一篇:几个Java的网络爬虫
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • Mercator: A Scalable, Extensible Web Cra
  • 什么是垂直搜索引擎(之二)
  • Writing a web crawler
  • 互联网搜索的未来
  • 国家版权局版权司副司长许超:关于搜索引擎
  • 百度数分钟内闪电裁员 企业软件事业部遭抛
  • 我对垂直搜索引擎的几点认识
  • Google Patent Filings by the Dozen
  • Manageability - Open Source Web Crawlers
  • 微软卡位第三代搜索技术 认为Google将很快
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • 谷歌宣布进军可替代能源 计划投资4.4万亿美
  • 搜索大战成Web 2.0操作系统之争
  • 7月美国搜索市场环比增长2% 雅虎微软成输家
  • 网页面向搜索引擎的搜索引擎优化
  • 史上最具技术创新的10大搜索引擎
  • Google如何预测下一届美国总统
  • 微软1亿美元收购语义搜索引擎Powerset
  • 很黄很暴力:人肉搜索引擎
  • OpenSocial只不过是Google公关骗局
  • 数据之美 百度GOOGLE统计的秘密
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静