• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            newplan

            阿基米德在洗澡時發現浮力原理,高興得來不及穿上褲子,跑到街上大喊:Eureka(我找到了)。
            posts - 39, comments - 26, trackbacks - 0, articles - 4
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
            import java.io.BufferedReader;
            import java.io.File;
            import java.io.FileWriter;
            import java.io.IOException;
            import java.io.InputStream;
            import java.io.InputStreamReader;
            import java.net.URL;
            import java.util.ArrayList;
            import java.util.HashMap;
            import java.util.Iterator;
            import java.util.concurrent.ExecutorService;
            import java.util.concurrent.Executors;
            import java.util.regex.Matcher;
            import java.util.regex.Pattern;

            class scraber implements Runnable
            {
                
            private String ss;
                
            private String url;
                
            /**
                 * 
                 * 該函數爬取網絡上跟所需查詢單詞想通的語句,并存取
                 * 
            @param ss 流
                 * 
            @param url 超鏈接
                 
            */

                
            public scraber(String ss,String url)
                
            {    
                    
            this.ss=ss;
                    
            this.url=url;

                }

                
            public void run() 
                
            {   
                        String s
            =new String("不錯");
                        
            if(ss.contains(s))
                        
            {
                        
            /**
                         * 需要對字符串進行一些必要裁剪,使得字符串更加簡單,醒目
                         
            */

                            
            int begin=ss.indexOf(s);
                            ss 
            = ss.substring(begin);
                            
            int end = 30 < ss.length()? 30:ss.length();
                            ss
            =ss.substring(0, end);
                            System.out.println(url
            +"  "+"begin:"+ss);    
                        }
                   
                }

            }

            /**
             * 
            @author Administrator
             * 在廣度遍歷的每一個枝點安放一個機器人線程,該線程負責該枝點一下的搜索
             
            */

            class irobot implements Runnable
            {    
                
            private String ss;
                
            public irobot(String ss)
                
            {
                    
            this.ss=ss;
                }

                
            public void run()
                
            {    
                    MySearch ms
            =new MySearch();
                    
            /**
                    *    線程獨立啟動對該URL內容的檢索
                    
            */

                    
            try
                    
            {
                        ms.checkURL(ss);
                    }

                    
            catch(IOException e)
                    
            {
                        
                    }

                }

            }

            class MySearch{
                
            /**
                 * 使用線程池來進行大批量線程的管理,這里規定當前最多線程數為10.可重用的線程
                 * 不斷嘗試著和newCachedThreadPool() 進行比較,發現newCachedThreadPool() 比較容易崩潰,但是速度非常快
                 * 適合于快速的查詢,但是要對查詢的深度進行嚴格限制。使用newFixedThreadPool(10)適度相對慢一些,但是查詢穩定,因為
                 * 查詢已經限制好了在10個線程的范圍內,但是到一定程度也會崩潰,這個程度比前面深,最主要是由于內存不足,算法本身對內存的需求很大。
                 
            */

                ExecutorService    exec 
            = Executors.newFixedThreadPool(10);
                
            /**由于多線程公用該變量,直接設置它為靜態變量
                 * 使用hashMap使得對URL的重復性查詢檢索效率倍增
                 
            */

                
            static HashMap<String,Integer>  hashList = new HashMap<String,Integer>();
                
            /**由于多線程公用該變量,直接設置它為靜態變量
                 * URL記錄在該文件中
                 
            */

                
            static File store=new File("d://link.txt");    
                
            /**由于多線程公用該變量,直接設置它為靜態變量
                 * 文件流
                 
            */

                
            static FileWriter writeFile;  
                
            public void checkURL(String uu)throws IOException
                
            {                       
                    
            if(uu.endsWith("/"))
                    
            {
                        uu
            =uu.substring(0,uu.length()-1);
                    }

                    
            try{
                        URL u 
            = new URL(uu);    
                        InputStream inn 
            =u.openStream();
                        
            if(hashList.containsKey(uu))
                        
            {
                            Integer numLink
            =hashList.get(uu);
                            hashList.put(uu, 
            ++numLink);
                            
            return;
                        }
             
                        
                        hashList.put(uu, 
            1);
                        
                        writeFile.append(uu
            +"\n");
                        
                        BufferedReader in 
            = new BufferedReader(new InputStreamReader(inn,"ISO-8859-1"));
                        
                        String ss;
                        
                        ArrayList
            <String> tempList=new ArrayList<String>();
                        
                        
            int sureOfCharset = 0
                        
            /**
                         * 當前所搜索的文檔,查詢一遍,查找所需要查找的句子
                         * 并做超鏈接提取工作,存放到臨時鏈接隊列中。
                         
            */

                        
            while((ss=in.readLine())!=null)
                        
            {
                            
            /**
                             * 注意對文檔的字符編碼進行轉換,一般是轉換成UTF-8格式
                             
            */

                            ss
            = ss.trim();
                            
            if(sureOfCharset == 0)
                            
            {
                                
            /**
                                 * 用正則表達式匹配更加精準,效率更好
                                 
            */

                                
            if(ss.contains("charset"))
                                
            {
                                
                                    String pattern1
            ="(utf-8|UTF-8)";
                                    String pattern2
            ="(gbk|GBK)";
                                    String pattern3
            ="(gb2312|GB2312)";
                                    Pattern p1
            =Pattern.compile(pattern1);
                                    Pattern p2
            =Pattern.compile(pattern2);
                                    Pattern p3
            =Pattern.compile(pattern3);
                                    Matcher m1
            =p1.matcher(ss);
                                    Matcher m2
            =p2.matcher(ss);
                                    Matcher m3
            =p3.matcher(ss);
                                    
            /**
                                     * 匹配模式一成功,即文檔為utf8編碼方式
                                     
            */

                                    
            if(m1.find())
                                    
            {    
                                        sureOfCharset 
            =1;
                                    }

                                    
            /**
                                     * 匹配模式二成功,即文檔為GBK編碼方式
                                     
            */

                                    
            else if(m2.find())
                                    
            {
                                        sureOfCharset 
            =2;
                                    }

                                    
            /**
                                     * 匹配模式三成功,即文檔為gb312編碼方式
                                     
            */

                                    
            else if(m3.find())
                                    
            {    
                                        sureOfCharset 
            =3;
                                    }

                                    
            /**
                                     * 匹配模式失敗
                                     
            */

                                    
            else
                                    
            {
                                        sureOfCharset 
            = 4;
                                    }

                                }

                                
                            }

                            
            switch(sureOfCharset)
                            
            {
                            
            case 0:{    
                                    ss 
            = new String(ss.getBytes("ISO-8859-1"),"utf-8");
                                    
            break;    
                                    }

                            
            case 1:{
                                    ss 
            = new String(ss.getBytes("ISO-8859-1"),"utf-8");
                                    
            break;    
                                    }
                                            
                            
            case 2:{
                                    ss 
            = new String(ss.getBytes("ISO-8859-1"),"gbk");
                                    
            break;    
                                    }

                            
            case 3:{
                                    ss
            = new String(ss.getBytes("ISO-8859-1"),"gb2312");
                                    
            break;    
                                    }

                            
            default:{    
                                    ss 
            = new String(ss.getBytes("ISO-8859-1"),"utf-8");
                                    
            break;    
                                    }

                            }

                            
            /**
                             * 開啟爬蟲線程抓取和“***”有關的語句
                             
            */

                            scraber    buger
            =new scraber(ss,uu);
                            
                            exec.execute(buger);
                            
            /**
                             * 提取超鏈接
                             
            */

                            check(ss,tempList);
                            
                        }

                        
            /**
                         * 對臨時超鏈接隊列進行處理
                         
            */

                        Iterator
            <String> it=tempList.iterator();
                        
            /**
                         * 提取出臨時超鏈接隊列中的每一個鏈接
                         
            */

                        
            while(it.hasNext())
                        
            {
                            
                            String ref 
            = (String)it.next();
                            
            /**
                             * 啟動一個機器人線程,處理該超鏈接
                             
            */

                            irobot ir
            =new irobot(ref);
                            Thread robThread
            = new Thread(ir);
                            robThread.start();
                            
                        }

                        
            /**
                         * 清空臨時隊列
                         
            */

                        tempList.clear();
                        
            /**
                         * 關閉線程池
                         
            */

                        exec.shutdown();
                    }

                    
            catch(IOException e)
                    
            {
                        
            /**
                         * 無法連接
                         *
                        
            */

                    }

                    
                                                                                                        
                }

                
            /**
                 * 從該行中提取出超鏈接
                 * 
            @param s 該行字符串
                 * 
            @param tempList    臨時超鏈接隊列
                 * 
                 
            */

                
            void check(String s,ArrayList<String> tempList)
                
            {
                    
            int i=s.indexOf("href=\"");
                    if(i>0)
                    
            {
                        String news
            =s.substring(i+6);
                        
            int j1= news.indexOf("\"");            
                        if(j1>0)
                        
            {
                            
                            String ref 
            = news.substring(0,j1);
                            tempList.add(ref);
                        }

                
                    }


                }


                
            public static void main(String args[])throws IOException
                
            {    
                    
                    MySearch t
            = new MySearch();
                    System.out.println(
            "%searching start%");
                    t.go(
            "http://www.shnenglu.com/"); 
                }



                
            void go(String uu)
                
            {
                    
            try{
                        writeFile
            = new FileWriter(store);
                        checkURL(uu);
                        writeFile.close();
                    }
            catch(IOException e)
                    
            {
                        
                    }

                
                }

            }

            热99re久久国超精品首页| 国产女人aaa级久久久级| 国产午夜精品理论片久久| 久久久久久久久久久久中文字幕 | 精品伊人久久久| 国内精品免费久久影院| 久久777国产线看观看精品| 看久久久久久a级毛片| 精品国产乱码久久久久久呢 | 久久久久人妻一区精品色| 久久人妻少妇嫩草AV蜜桃| 99久久这里只精品国产免费| 蜜桃麻豆WWW久久囤产精品| 久久精品国产久精国产一老狼| yy6080久久| 久久久老熟女一区二区三区| 99久久无码一区人妻a黑| 一本大道久久a久久精品综合| 国产午夜精品理论片久久 | 欧美日韩精品久久久免费观看 | 国内精品伊人久久久久网站| 国产成人精品久久亚洲高清不卡 | 久久久噜噜噜久久中文字幕色伊伊| 久久人人爽人人爽人人片AV麻豆 | 久久国产亚洲精品| 色婷婷久久综合中文久久蜜桃av | 久久国产三级无码一区二区| 久久国产精品二国产精品| 97精品伊人久久大香线蕉| 九九久久自然熟的香蕉图片| 99久久精品免费国产大片| 国产一区二区久久久| 久久99国产精品尤物| 欧美久久久久久精选9999| 亚洲狠狠婷婷综合久久久久| 久久久中文字幕| 亚洲国产视频久久| 国产激情久久久久影院小草| 国产精品久久久香蕉| 996久久国产精品线观看| 无码人妻久久一区二区三区蜜桃|