欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Heritrix源碼分析(九) Heritrix的二次抓取以及如何讓Heritrix抓取你...

Heritrix源碼分析(九) Heritrix的二次抓取以及如何讓Heritrix抓取你不想抓取的URL

文章分類(lèi):互聯(lián)網(wǎng)

             本博客屬原創(chuàng )文章,歡迎轉載!轉載請務(wù)必注明出處:http://guoyunsky.javaeye.com/blog/644396

       歡迎加入Heritrix群(QQ):10447185 

 

      前面說(shuō)過(guò)Heritrix可以在某個(gè)抓取基礎上(這里假設為A)繼續抓取,因為Heritrix對每一個(gè)URL都會(huì )有相應的日志處理,同時(shí)還有checkpoint(備份中心)。所以只要通過(guò)A上的日志就可以完全按照該基礎A繼續抓取,不會(huì )重復抓取任何A抓過(guò)的任何東西,也會(huì )繼續抓取A沒(méi)有抓過(guò)的URL。做到這個(gè)有兩種方法,一種是針對Web啟動(dòng)的,還有一種是針對我上次寫(xiě)的不通過(guò)Web啟動(dòng)的方式(啟動(dòng)方式見(jiàn)博客:Heritrix源碼分析(五) 如何讓Heritrix在Ecplise等IDE下編程啟動(dòng)).

       1)下面介紹這兩種啟動(dòng)方式,第一種,通過(guò)Web啟動(dòng):

              進(jìn)入頁(yè)面,選擇:Jobs->Base on a recovery->然后再選擇你要二次抓取的Job中的recover-log->然后再點(diǎn)擊按鈕Submit Job。之后回到Console頁(yè)面,點(diǎn)擊Start。之后就開(kāi)始再你想要的基礎上抓取了。你可以進(jìn)入這個(gè)新建的抓取JOB下的logs目錄,發(fā)現里面有個(gè)recover.gz大小跟你想要二次抓取JOB中的recover.gz大小一般大。以及你去查看該job下的order.xml中的<string name="recover-path"></string>中間的值發(fā)現就是你要二次抓取job下recover.gz的絕對目錄

       2)不通過(guò)Web方式啟動(dòng):

               這個(gè)相對簡(jiǎn)單,只要修改order.xml中<string name="recover-path">D:/recover.gz</string>,中間的值就是你想二次抓取的JOB中logs目錄下recover.gz的絕對路徑。

               同時(shí)最好更新一下值為:
               <boolean name="checkpoint-copy-bdbje-logs">true</boolean>
               <boolean name="recover-retain-failures">false</boolean>
               <boolean name="recover-scope-includes">false</boolean>
               <boolean name="recover-scope-enqueues">false</boolean>

               至于為什么要這樣設置,請參考我關(guān)于order.xml介紹的博客:Heritrix源碼分析(二) 配置文件order.xml介紹

 

      同時(shí)可能你已經(jīng)知道某些URL不需要抓取,比如從數據庫導出來(lái)的,而這些URL你的Heritrix并沒(méi)有處理過(guò)。所以這些外部的URL就無(wú)法通過(guò)以上兩種辦法導入Heritrix了。這里我寫(xiě)了個(gè)工具類(lèi),有兩種方式,一種是你將URL都放在文件中,然后通過(guò)這個(gè)工具類(lèi)從這個(gè)文件中讀取這些URL(必須一行一個(gè)URL),導入到Heritrix中。還有一種方法是針對數據庫的,你只要提供相應的ResultSet以及該URL對應數據庫的字段名,也可以導入Heritrix,下面貼上代碼:

      

Java代碼
  1. import java.io.BufferedReader;   
  2. import java.io.File;   
  3. import java.io.FileInputStream;   
  4. import java.io.FileNotFoundException;   
  5. import java.io.IOException;   
  6. import java.io.InputStream;   
  7. import java.io.InputStreamReader;   
  8. import java.io.UnsupportedEncodingException;   
  9. import java.sql.Connection;   
  10. import java.sql.ResultSet;   
  11. import java.sql.SQLException;   
  12. import java.sql.Statement;   
  13.   
  14. import org.archive.crawler.frontier.RecoveryJournal;   
  15.   
  16. public class UrlToRecoverUtil {   
  17.     /**  
  18.      * 從文件中導入URl到recover.gz以便URL不再被抓取  
  19.      *   
  20.      * @param sourceFilePath        URL來(lái)源文件  
  21.      * @param sourceFileEncoding    URL來(lái)源文件的編碼   
  22.      * @param recoverGzPath         要寫(xiě)到的recover.gz文件目錄  
  23.      * @param recoverGzFileName     recover.gz文件名,可以為空  
  24.      * @return  
  25.      */  
  26.     public static boolean urlToRecoverUtilByFile(String sourceFilePath,String sourceFileEncoding,String recoverGzDir,String recoverGzFileName){   
  27.         boolean result=false;   
  28.            
  29.         InputStream is=null;   
  30.         InputStreamReader isr=null;   
  31.         BufferedReader br=null;   
  32.         File sourceFile=null;   
  33.            
  34.         String line=null;   
  35.         RecoveryJournal recover = null;   
  36.            
  37.         try {   
  38.             sourceFile=new File(sourceFilePath);   
  39.                
  40.             //recover.gz文件為空則采用默認名字   
  41.             if(recoverGzFileName==null||recoverGzFileName.equals("")){   
  42.                 recoverGzFileName="recover.gz";   
  43.             }   
  44.             recover=new RecoveryJournal(recoverGzDir,recoverGzFileName);//構造recover.gz對象   
  45.                
  46.             //讀取文件內容   
  47.             is=new FileInputStream(sourceFile);   
  48.             isr=new InputStreamReader(is,sourceFileEncoding);   
  49.             br=new BufferedReader(isr);   
  50.                
  51.             //一行一行寫(xiě)入recover.gz文件   
  52.             while((line=br.readLine().trim())!=null){   
  53.                 if(!line.equals("")){   
  54.                     recover.writeLine(RecoveryJournal.F_SUCCESS, line);   
  55.                 }   
  56.                    
  57.             }   
  58.             result=true;   
  59.                
  60.         } catch (FileNotFoundException e) {   
  61.             e.printStackTrace();   
  62.         } catch (UnsupportedEncodingException e) {   
  63.             e.printStackTrace();   
  64.         } catch (IOException e) {   
  65.             e.printStackTrace();   
  66.         }finally{   
  67.             try {   
  68.                 if(recover!=null){   
  69.                     recover.close();   
  70.                 }   
  71.                 if(br!=null){   
  72.                     br.close();   
  73.                 }   
  74.                 if(isr!=null){   
  75.                     isr.close();   
  76.                 }   
  77.                 if(is!=null){   
  78.                     is.close();   
  79.                 }   
  80.             } catch (IOException e) {   
  81.                 e.printStackTrace();   
  82.             }   
  83.                
  84.         }   
  85.            
  86.         return result;   
  87.     }   
  88.     /**  
  89.      * 從ResultSet結果集中獲取URL導入到recover.gz以便URl不再被抓取  
  90.      *   
  91.      * @param rs                ResultSet結果集  
  92.      * @param filedName         ResultSet結果集中要獲取URL對應的字段名         
  93.      * @param recoverGzDir      要寫(xiě)到的recover.gz文件目錄  
  94.      * @param recoverGzFileName recover.gz文件名,可以為空  
  95.      * @return  
  96.      */  
  97.     public static boolean urlToRecoverUtilByResultSet(ResultSet rs,String filedName,String recoverGzDir,String recoverGzFileName){   
  98.         boolean result=false;   
  99.            
  100.         String line=null;   
  101.         RecoveryJournal recover = null;   
  102.            
  103.         try {   
  104.             if(recoverGzFileName==null||recoverGzFileName.equals("")){   
  105.                 recoverGzFileName="recover.gz";   
  106.             }   
  107.             recover=new RecoveryJournal(recoverGzDir,recoverGzFileName);   
  108.             if(rs!=null){   
  109.                 while(rs.next()){   
  110.                     line=rs.getString(filedName).trim();   
  111.                     if(!line.equals("")){   
  112.                         recover.writeLine(RecoveryJournal.F_SUCCESS, line);   
  113.                     }   
  114.                        
  115.                 }   
  116.                 result=true;   
  117.             }   
  118.         } catch (SQLException e) {   
  119.             e.printStackTrace();   
  120.         } catch (IOException e) {   
  121.             e.printStackTrace();   
  122.         }finally{   
  123.             try {   
  124.                 if(rs!=null){   
  125.                     rs.close();   
  126.                 }   
  127.                 if(recover!=null){   
  128.                     recover.close();   
  129.                 }   
  130.             } catch (SQLException e) {   
  131.                 e.printStackTrace();   
  132.             }   
  133.         }      
  134.            
  135.         return result;   
  136.     }   
  137.        
  138.        
  139.        
  140.     /**  
  141.      * @param args  
  142.      */  
  143.     public static void main(String[] args) {   
  144.         /*  
  145.          * 示例,從結果集中寫(xiě)入URL到recover.gz  
  146.          */  
  147.         Connection con=null;   
  148.         Statement stmt=null;   
  149.         ResultSet rs=null;   
  150.         String sql="SELECT CLASSIFY_INFO_URL FROM CLASSIFY_INFO";   
  151.         boolean result=false;   
  152.         try {   
  153.             con=DatabaseUtil.getConnection_Mysql_CrawlServer_Local();//獲取Connection   
  154.             stmt=con.createStatement();   
  155.             rs=stmt.executeQuery(sql);   
  156.             result=urlToRecoverUtilByResultSet(rs,"CLASSIFY_INFO_URL","D:/HeritrixRecover/",null);   
  157.             System.out.println("從結果集中導入URL到recover.gz文件:"+(result?"成功!":"失??!"));   
  158.                
  159.         } catch (SQLException e) {   
  160.             // TODO Auto-generated catch block   
  161.             e.printStackTrace();   
  162.         }finally{   
  163.             DatabaseUtil.closeConnection(con, stmt, rs);//關(guān)閉Connection、Statement、ResultSet   
  164.         }   
  165.            
  166.   
  167.     }   
  168.   
  169. }  

 

這個(gè)工具類(lèi)其實(shí)主要也只是生成recover.gz文件。如果你采用Web方式啟動(dòng),你只要找到一個(gè)你抓取過(guò)的JOB,然后用這個(gè)生成的recover.gz目錄覆蓋你找到j(luò )ob下logs目錄中的recover.gz即可。而如果你采用非Web啟動(dòng)就更簡(jiǎn)單了,只要將order.xml中<string name="recover-path">D:/recover.gz</string>中的值改成你生成recover.gz絕對路徑即可!

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
黑馬 JavaMail加深總結pop3協(xié)議收郵件
靜態(tài)HTML生成模式代碼
android4.0.3去掉底部狀態(tài)欄statusbar,全屏顯示示例代碼
一些常用的,簡(jiǎn)單的方法
java對文件操作例子輔助類(lèi)1
J2ME藍牙手機應用程序開(kāi)發(fā)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久