亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spider.java

?? CroftSoft Code Library是一個開源的可移植的純Java游戲庫
?? JAVA
字號:
     package com.croftsoft.apps.spider;     import java.io.*;     import java.net.*;     import java.util.*;     import javax.swing.text.MutableAttributeSet;     import javax.swing.text.html.HTML;     import javax.swing.text.html.HTMLEditorKit;     import javax.swing.text.html.parser.DocumentParser;     import javax.swing.text.html.parser.DTD;     import com.croftsoft.core.lang.NullArgumentException;     import com.croftsoft.core.lang.lifecycle.Lifecycle;     import com.croftsoft.core.role.Consumer;     import com.croftsoft.core.role.Filter;     /*********************************************************************     * Web spider.     *      * @version     *   2003-04-09     * @since     *   2003-04-09     * @author     *   <a href="http://www.croftsoft.com/">David Wallace Croft</a>     *********************************************************************/     public final class  Spider       implements Lifecycle     //////////////////////////////////////////////////////////////////////     //////////////////////////////////////////////////////////////////////     {     private static final String  THREAD_NAME    = "Spider";     private static final long    DOWNLOAD_DELAY = 1000;     //     private final Consumer  urlConsumer;     private final Stack     stack;     private final Set       knownSet;     private final HTMLEditorKit.ParserCallback  parserCallback;     //     private Filter   urlFilter;     private Filter   contentTypeFilter;     private Thread   thread;     private boolean  stopRequested;     private URL      currentURL;     //////////////////////////////////////////////////////////////////////     //////////////////////////////////////////////////////////////////////     public static void  main ( String [ ]  args )       throws Exception     //////////////////////////////////////////////////////////////////////     {       Spider  spider = new Spider (         new Consumer ( )         {           public void  consume ( Object  o )           {             System.out.println ( o );           }         } );       SpiderUrlFilter  spiderUrlFilter = new SpiderUrlFilter ( spider );       spiderUrlFilter.setSameHostOnly ( true );       spiderUrlFilter.setSamePortOnly ( true );       spider.setUrlFilter ( spiderUrlFilter );       spider.setContentTypeFilter (         new Filter ( )         {           public boolean  isFiltrate ( Object  o )           {             return ( ( String ) o ).equals ( "text/html" );           }         } );       spider.push ( args [ 0 ] );       spider.init ( );       spider.start ( );     }     //////////////////////////////////////////////////////////////////////     //////////////////////////////////////////////////////////////////////     public  Spider (       Consumer  urlConsumer,       Filter    urlFilter,       Filter    contentTypeFilter )     //////////////////////////////////////////////////////////////////////     {       NullArgumentException.check ( this.urlConsumer = urlConsumer );       setUrlFilter ( urlFilter );       setContentTypeFilter ( contentTypeFilter );       stack = new Stack ( );       knownSet = new HashSet ( );       parserCallback = new HTMLEditorKit.ParserCallback ( )         {           public void  handleSimpleTag (             HTML.Tag             t,             MutableAttributeSet  a,             int                  pos )           {             if ( t == HTML.Tag.A )             {               push ( ( String ) a.getAttribute ( HTML.Attribute.HREF ) );             }             super.handleSimpleTag ( t, a, pos );           }         };     }     public  Spider ( Consumer  urlConsumer )     //////////////////////////////////////////////////////////////////////     {       this ( urlConsumer, null, null );     }     //////////////////////////////////////////////////////////////////////     // accessor methods     //////////////////////////////////////////////////////////////////////     public URL  getCurrentURL ( ) { return currentURL; }     //////////////////////////////////////////////////////////////////////     // mutator methods     //////////////////////////////////////////////////////////////////////     public boolean  push ( String  urlString )     //////////////////////////////////////////////////////////////////////     {       if ( urlString == null )       {         return false;       }       URL  newURL = null;       try       {         if ( !urlString.trim ( ).toLowerCase ( ).startsWith ( "http:" ) )         {           String  externalForm = currentURL.toExternalForm ( );           if ( !externalForm.endsWith ( "/" ) )           {             externalForm += "/";           }           newURL = new URL ( new URL ( externalForm ), urlString );         }         else         {           newURL = new URL ( urlString );         }         if ( newURL.getProtocol ( ).equals ( "http" )           && ( ( urlFilter == null )             || urlFilter.isFiltrate ( newURL ) ) )         {           String  externalForm = newURL.toExternalForm ( );           if ( externalForm.endsWith ( "/" ) )           {             externalForm               = externalForm.substring ( 0, externalForm.length ( ) - 1 );             newURL = new URL ( externalForm );           }           // trim off the leading "http://"           externalForm = externalForm.substring ( 7 );           if ( !knownSet.contains ( externalForm ) )           {             stack.push ( newURL );             knownSet.add ( externalForm );             return true;           }         }       }       catch ( MalformedURLException  ex )       {       }       return false;     }     public void  setContentTypeFilter ( Filter  contentTypeFilter )     //////////////////////////////////////////////////////////////////////     {       this.contentTypeFilter = contentTypeFilter;     }     public void  setUrlFilter ( Filter  urlFilter )     //////////////////////////////////////////////////////////////////////     {       this.urlFilter = urlFilter;     }     //////////////////////////////////////////////////////////////////////     // interface Lifecycle methods     //////////////////////////////////////////////////////////////////////     public void  init ( )     //////////////////////////////////////////////////////////////////////     {     }     public synchronized void  start ( )     //////////////////////////////////////////////////////////////////////     {       stopRequested = false;       if ( thread == null )       {         thread = new Thread (           new Runnable ( )           {             public void  run ( )             {               loop ( );             }           },           THREAD_NAME );         thread.start ( );       }       else       {         notify ( );       }     }     public synchronized void  stop ( )     //////////////////////////////////////////////////////////////////////     {       stopRequested = true;       thread.interrupt ( );     }     public synchronized void  destroy ( )     //////////////////////////////////////////////////////////////////////     {       thread = null;       stopRequested = false;       notify ( );     }     //////////////////////////////////////////////////////////////////////     // private methods     //////////////////////////////////////////////////////////////////////     private void  loop ( )     //////////////////////////////////////////////////////////////////////     {       while ( thread != null )       {         try         {           spiderNext ( );           if ( stopRequested )           {             synchronized ( this )             {               while ( stopRequested )               {                 wait ( );               }             }           }         }         catch ( InterruptedException  ex )         {         }       }     }     private void  spiderNext ( )       throws InterruptedException     //////////////////////////////////////////////////////////////////////     {       if ( stack.size ( ) < 1 )       {         stop ( );         destroy ( );       }       Thread.sleep ( DOWNLOAD_DELAY );       currentURL = ( URL ) stack.pop ( );       try       {         HttpURLConnection  httpURLConnection           = ( HttpURLConnection ) currentURL.openConnection ( );         String  contentType = null;         try         {           contentType = httpURLConnection.getContentType ( );           if ( contentType.equals ( "text/html" ) )           {             BufferedReader  bufferedReader = new BufferedReader (               new InputStreamReader ( currentURL.openStream ( ) ) );             try             {               DocumentParser  documentParser                 = new DocumentParser ( DTD.getDTD ( "html32" ) );               documentParser.parse (                 bufferedReader, parserCallback, true );             }             finally             {               bufferedReader.close ( );             }           }         }         finally         {           httpURLConnection.disconnect ( );         }         if ( ( contentTypeFilter == null )           || ( contentType != null )           && contentTypeFilter.isFiltrate ( contentType ) )         {           Thread.sleep ( DOWNLOAD_DELAY );           urlConsumer.consume ( currentURL );         }       }       catch ( Exception  ex )       {         ex.printStackTrace ( );       }     }     //////////////////////////////////////////////////////////////////////     //////////////////////////////////////////////////////////////////////     }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本一区二区在线不卡| 欧美自拍偷拍一区| 精品sm在线观看| 久久99精品一区二区三区三区| 91福利社在线观看| 日韩精品欧美精品| 欧美一级爆毛片| 国产一区二区久久| 欧美高清在线精品一区| 一本久道久久综合中文字幕| 亚洲成av人片| 久久综合狠狠综合久久综合88| 成人午夜av电影| 夜夜揉揉日日人人青青一国产精品| 欧美日韩一区二区三区在线 | 91成人在线免费观看| 一区二区三区欧美日韩| 欧美日韩视频第一区| 免费看欧美女人艹b| 亚洲国产精品国自产拍av| 99精品欧美一区二区蜜桃免费| 亚洲欧美日韩国产另类专区| 欧美肥妇bbw| 成人av资源站| 日韩中文字幕1| 日本一区二区成人在线| 欧美日韩在线观看一区二区| 激情综合色丁香一区二区| 亚洲色图视频网| 日韩一区二区精品| 一本高清dvd不卡在线观看| 日本女优在线视频一区二区| 国产精品色婷婷| 欧美乱妇15p| 成人少妇影院yyyy| 日韩不卡手机在线v区| 日本一区二区动态图| 正在播放亚洲一区| 97se亚洲国产综合自在线观| 午夜精品福利一区二区蜜股av | 欧美在线免费播放| 日本va欧美va欧美va精品| 99精品久久免费看蜜臀剧情介绍| 精品视频全国免费看| 国产成人自拍高清视频在线免费播放| 尤物视频一区二区| 国产午夜亚洲精品午夜鲁丝片 | 国产在线一区观看| 亚洲无人区一区| 国产精品人人做人人爽人人添| 7799精品视频| 肉丝袜脚交视频一区二区| 一区二区三区在线观看网站| 日本一区中文字幕 | 日产精品久久久久久久性色| 国产精品久久久一区麻豆最新章节| 欧美一区二区三区日韩视频| 色综合一个色综合| 成人a级免费电影| 国产91精品一区二区麻豆亚洲| 欧美96一区二区免费视频| 亚洲宅男天堂在线观看无病毒| 国产精品嫩草99a| 久久精品夜色噜噜亚洲a∨| 日韩欧美国产高清| 久久www免费人成看片高清| 国产日韩一级二级三级| 91精品国产综合久久精品app| av综合在线播放| 国产精品白丝jk黑袜喷水| 久久99精品视频| 久久99精品国产麻豆婷婷| 免费看精品久久片| 久久精品国产在热久久| 日本欧美在线看| 午夜免费久久看| 水野朝阳av一区二区三区| 亚洲a一区二区| 天天综合色天天综合| 午夜一区二区三区视频| 亚洲二区在线视频| 日日夜夜一区二区| 六月丁香婷婷色狠狠久久| 久久电影网电视剧免费观看| 日本aⅴ亚洲精品中文乱码| 美腿丝袜亚洲色图| 黄页视频在线91| 成人激情小说乱人伦| 懂色av一区二区三区免费观看| www.视频一区| 欧美视频精品在线| 欧美一区二区视频观看视频| 精品久久久久久久久久久院品网| 精品国产乱码久久久久久蜜臀| 久久久久久久久久久久久女国产乱 | 日韩女优毛片在线| 久久午夜色播影院免费高清| 久久精品一区二区三区不卡| 国产精品美女久久久久av爽李琼| 中文字幕一区不卡| 亚洲高清三级视频| 美女网站色91| 成人短视频下载| 欧美日韩一区二区三区高清| 欧美一区永久视频免费观看| 欧美精品一区二区三区蜜臀| 国产精品国产三级国产a| 亚洲午夜久久久久中文字幕久| 蜜桃久久久久久久| 99在线精品视频| 欧美妇女性影城| 国产亚洲人成网站| 亚洲国产日韩av| 韩国欧美国产一区| 狠狠色综合播放一区二区| 欧美日韩一区二区电影| 国产成人av电影在线| 在线看国产一区| 欧美成人精品福利| 日韩理论片在线| 日本视频中文字幕一区二区三区| 成人一区在线观看| 欧美精品乱码久久久久久按摩 | 欧美日本在线一区| 欧美国产一区二区在线观看| 日韩电影免费在线观看网站| 成人妖精视频yjsp地址| 91 com成人网| 亚洲天堂久久久久久久| 九色porny丨国产精品| 色成人在线视频| 国产亚洲欧洲一区高清在线观看| 亚洲午夜精品在线| 成人午夜视频网站| 日韩欧美一区二区三区在线| 亚洲福利一区二区三区| 99久久伊人精品| 久久久天堂av| 日本不卡免费在线视频| 欧洲在线/亚洲| 亚洲欧洲日韩在线| 国产一区999| 精品国产一区二区在线观看| 精品一区二区三区在线观看 | 精品剧情v国产在线观看在线| 一区二区高清免费观看影视大全| 国产一区欧美二区| 精品少妇一区二区| 丝袜a∨在线一区二区三区不卡| 在线视频一区二区三区| 亚洲欧美另类久久久精品2019| 国产精品123| 亚洲精品一线二线三线| 蜜臀av一区二区三区| 欧美日韩国产乱码电影| 亚洲一区二区成人在线观看| 91免费看片在线观看| 国产精品午夜春色av| 国产成人免费av在线| 久久这里只有精品视频网| 奇米精品一区二区三区在线观看| 欧美偷拍一区二区| 亚洲小少妇裸体bbw| 91九色02白丝porn| 一区二区在线观看视频| 色av一区二区| 亚洲成人av电影在线| 欧美吻胸吃奶大尺度电影 | 一区二区三区资源| 91在线视频观看| 亚洲欧洲av在线| 色综合色狠狠综合色| 一区二区视频在线看| 欧美主播一区二区三区| 亚洲成在线观看| 91精品福利在线一区二区三区| 日本欧美在线观看| 欧美成人a∨高清免费观看| 免费欧美高清视频| 久久精品人人做人人综合| 亚洲在线视频网站| 久久久国产精品午夜一区ai换脸| 99re在线视频这里只有精品| 欧美aa在线视频| 亚洲永久精品国产| 国产精品久久久久久久久免费丝袜| 91精品国产91久久综合桃花| 成人精品一区二区三区中文字幕| av电影在线不卡| 亚洲综合视频在线观看| 国产精品免费aⅴ片在线观看| 欧洲精品在线观看| 欧美一区二区三区播放老司机| 色综合激情五月| 久久欧美一区二区| 成人精品在线视频观看| 亚洲国产精品一区二区www在线| 日韩你懂的在线观看| 成人av电影在线网| 亚洲高清在线精品|