青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

newplan

阿基米德在洗澡時(shí)發(fā)現(xiàn)浮力原理,高興得來不及穿上褲子,跑到街上大喊:Eureka(我找到了)。
posts - 39, comments - 26, trackbacks - 0, articles - 4
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
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;
    
/**
     * 
     * 該函數(shù)爬取網(wǎng)絡(luò)上跟所需查詢單詞想通的語句,并存取
     * 
@param ss 流
     * 
@param url 超鏈接
     
*/

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

    }

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

                
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
 * 在廣度遍歷的每一個(gè)枝點(diǎn)安放一個(gè)機(jī)器人線程,該線程負(fù)責(zé)該枝點(diǎn)一下的搜索
 
*/

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

    
public void run()
    
{    
        MySearch ms
=new MySearch();
        
/**
        *    線程獨(dú)立啟動(dòng)對(duì)該URL內(nèi)容的檢索
        
*/

        
try
        
{
            ms.checkURL(ss);
        }

        
catch(IOException e)
        
{
            
        }

    }

}

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

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

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

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

    
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
            
/**
             * 當(dāng)前所搜索的文檔,查詢一遍,查找所需要查找的句子
             * 并做超鏈接提取工作,存放到臨時(shí)鏈接隊(duì)列中。
             
*/

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

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

                    
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;    
                        }

                }

                
/**
                 * 開啟爬蟲線程抓取和“***”有關(guān)的語句
                 
*/

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

                check(ss,tempList);
                
            }

            
/**
             * 對(duì)臨時(shí)超鏈接隊(duì)列進(jìn)行處理
             
*/

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

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

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

            
/**
             * 清空臨時(shí)隊(duì)列
             
*/

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

            exec.shutdown();
        }

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

        }

        
                                                                                            
    }

    
/**
     * 從該行中提取出超鏈接
     * 
@param s 該行字符串
     * 
@param tempList    臨時(shí)超鏈接隊(duì)列
     * 
     
*/

    
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)
        
{
            
        }

    
    }

}


只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美黑人国产人伦爽爽爽| 精品成人一区二区三区四区| 裸体丰满少妇做受久久99精品| 韩曰欧美视频免费观看| 欧美日韩第一区日日骚| 亚洲一区二区在| 欧美高清影院| 久久精品成人欧美大片古装| 日韩午夜精品| 在线观看视频日韩| 欧美一区二区三区免费看 | 久久精品国产综合| 亚洲国产电影| 欧美一级视频精品观看| 亚洲精品1区2区| 国产日韩一区二区三区| 欧美日韩精品一区二区天天拍小说 | 午夜视频久久久久久| 日韩小视频在线观看| 欧美国产激情| 久久影院亚洲| 久久麻豆一区二区| 久久精品国产亚洲一区二区| 亚洲美女中出| 艳妇臀荡乳欲伦亚洲一区| 红桃视频一区| 亚洲麻豆视频| 欧美午夜女人视频在线| 欧美成人精品福利| 奶水喷射视频一区| 午夜视频久久久| 亚洲成人中文| 欧美.www| 亚洲福利在线观看| 亚洲国产精品一区二区三区| 亚洲电影激情视频网站| 久久久噜噜噜久噜久久| 久久精品99国产精品日本| 久久国产99| 久久综合九色欧美综合狠狠| 麻豆精品传媒视频| 亚洲国产成人91精品| 麻豆精品国产91久久久久久| 欧美丰满少妇xxxbbb| 亚洲国产91色在线| 亚洲精品久久久久久久久久久久久| 91久久精品美女| 亚洲一区二区伦理| 久久成人18免费观看| 亚洲狠狠婷婷| 亚洲一区二区三区在线观看视频| 亚洲一区二区综合| 欧美在线视频免费观看| 你懂的国产精品永久在线| 亚洲激情视频网| 午夜电影亚洲| 久久久一区二区| 欧美日韩一区二区高清| 国产日本亚洲高清| 亚洲人成高清| 欧美亚洲一区二区三区| 欧美成人综合一区| 999在线观看精品免费不卡网站| 午夜国产精品影院在线观看| 免费观看一区| 国产女精品视频网站免费| 亚洲国产精品久久久久秋霞影院| 亚洲天堂av在线免费观看| 久久精品国产96久久久香蕉| 欧美日韩精品一二三区| 欧美日韩国产一级| 欧美视频免费看| 亚洲欧洲日本mm| 久久亚洲影院| 久久精品国产一区二区电影 | 欧美精品日韩一本| 国产日韩综合| 老司机精品视频网站| 免播放器亚洲一区| 91久久精品一区二区别| 91久久国产综合久久91精品网站| 久久久水蜜桃| 一区二区精品在线| 亚洲一区二区三区乱码aⅴ| 国产日韩欧美一区| 欧美国产一区二区在线观看| 欧美日韩1区2区| 久久久精品国产99久久精品芒果| 久久久久这里只有精品| 亚洲免费av观看| 香蕉成人啪国产精品视频综合网| 在线成人中文字幕| av成人免费观看| 国内精品久久久久久影视8| 亚洲国产日韩欧美在线99| 国产精品黄色| 欧美国产日韩视频| 国产一二三精品| 日韩手机在线导航| 伊人久久亚洲热| 一区二区三区欧美亚洲| 亚洲第一在线综合网站| 亚洲美女淫视频| 亚洲第一区在线观看| 亚洲视频在线观看视频| 亚洲福利视频三区| 午夜精品久久一牛影视| 亚洲视频一二三| 欧美激情一区二区| 麻豆av福利av久久av| 国产精品一二一区| 亚洲精品一区二区三区在线观看| 狠狠狠色丁香婷婷综合久久五月| 日韩视频在线播放| 亚洲区国产区| 久久国产精品久久国产精品| 亚洲一区二区视频| 欧美久久一级| 亚洲国产成人精品女人久久久| 国产一区二区三区高清| 亚洲视频日本| 亚洲午夜久久久久久尤物| 欧美激情中文字幕乱码免费| 久久只有精品| 国产自产高清不卡| 午夜在线观看免费一区| 亚洲欧美久久久| 欧美午夜精品电影| 一区二区成人精品| 亚洲影音先锋| 国产精品国内视频| 亚洲永久免费av| 欧美亚洲视频| 国产欧美日本在线| 亚洲欧美高清| 久久精品一区二区| 国产伦精品一区二区三区| 亚洲一区二区动漫| 香蕉视频成人在线观看| 国产欧美精品va在线观看| 亚洲性感激情| 欧美一区二区三区四区在线观看地址 | 国内揄拍国内精品久久| 亚洲自拍偷拍一区| 亚洲欧美中文日韩在线| 国产精品福利在线观看| 夜夜嗨av一区二区三区四季av| 亚洲毛片av| 欧美色偷偷大香| 亚洲视频axxx| 久久精品国产免费看久久精品| 国产午夜精品在线| 久久综合色影院| 亚洲欧洲日本国产| 亚洲伊人第一页| 国内外成人在线| 媚黑女一区二区| 日韩系列欧美系列| 欧美在线不卡| 亚洲高清资源| 欧美日韩一区自拍| 午夜精品亚洲一区二区三区嫩草| 牛牛影视久久网| 亚洲视频一二| 激情久久久久久| 欧美区国产区| 欧美在线免费观看| 亚洲欧洲另类国产综合| 久久成人综合视频| 亚洲精品一区中文| 国产精品免费看片| 久久夜色精品亚洲噜噜国产mv| 亚洲精品影视| 久久综合精品一区| 亚洲你懂的在线视频| 亚洲国产精品一区二区第一页 | 亚洲视频在线观看视频| 欧美成人在线免费视频| 亚洲一区免费观看| 亚洲狠狠丁香婷婷综合久久久| 欧美日韩一区二区三区在线视频| 羞羞漫画18久久大片| 亚洲精品社区| 欧美.www| 欧美在线观看视频| 一区二区三区精品视频| 亚洲成人在线| 国产日韩精品一区| 欧美先锋影音| 欧美交受高潮1| 蜜桃av噜噜一区| 欧美在线电影| 亚洲一级在线观看| 日韩视频不卡| 亚洲高清资源综合久久精品| 久久全球大尺度高清视频| 欧美亚洲免费高清在线观看| 一区二区三区四区蜜桃| 亚洲伦伦在线| 亚洲精品国产视频|