2011-07-15 17 views
3

認証にユーザー名とパスワードが必要なページをクロールしています。そして、コード内でユーザー名とパスワードを渡したら、そのページのサーバーから200 OK応答を返すことに成功しました。しかし、それは200 OK応答を返すとすぐに停止します。 認証後にそのページに移動して、そのページにあるすべてのリンクをクロールしません。And this crawler is taken from http://code.google.com/p/crawler4j/。 これは私が認証のものをやっているのコード...パスワードで保護されたページのすべてのリンクをクロールする

public class MyCrawler extends WebCrawler { 

    Pattern filters = Pattern.compile(".*(\\.(css|js|bmp|gif|jpe?g" 
      + "|png|tiff?|mid|mp2|mp3|mp4" + "|wav|avi|mov|mpeg|ram|m4v|pdf" 
      + "|rm|smil|wmv|swf|wma|zip|rar|gz))$"); 

    List<String> exclusions; 


    public MyCrawler() { 

     exclusions = new ArrayList<String>(); 
     //Add here all your exclusions 

    exclusions.add("http://www.dot.ca.gov/dist11/d11tmc/sdmap/cameras/cameras.html"); 

    } 


    public boolean shouldVisit(WebURL url) { 

    String href = url.getURL().toLowerCase(); 


    DefaultHttpClient client = null; 

     try 
     { 
     System.out.println("----------------------------------------"); 
      System.out.println("WEB URL:- " +url); 


      client = new DefaultHttpClient(); 

      client.getCredentialsProvider().setCredentials(
        new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM), 
        new UsernamePasswordCredentials("test", "test")); 
      client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true); 



     for(String exclusion : exclusions){ 
      if(href.startsWith(exclusion)){ 
       return false; 
      } 
     } 

     if (href.startsWith("http://") || href.startsWith("https://")) { 
      return true; 
     } 

      HttpGet request = new HttpGet(url.toString()); 

      System.out.println("----------------------------------------"); 
      System.out.println("executing request" + request.getRequestLine()); 
      HttpResponse response = client.execute(request); 
      HttpEntity entity = response.getEntity(); 


      System.out.println(response.getStatusLine()); 



    } 
     catch(Exception e) { 
      e.printStackTrace(); 
     } 


     return false; 
    } 

    public void visit(Page page) { 
    System.out.println("hello"); 
    int docid = page.getWebURL().getDocid(); 
     String url = page.getWebURL().getURL(); 
     System.out.println("Page:- " +url); 
     String text = page.getText(); 
     List<WebURL> links = page.getURLs(); 
    int parentDocid = page.getWebURL().getParentDocid(); 


    System.out.println("Docid: " + docid); 
     System.out.println("URL: " + url); 
     System.out.println("Text length: " + text.length()); 
     System.out.println("Number of links: " + links.size()); 
     System.out.println("Docid of parent page: " + parentDocid); 

} 
} 

があると説明したように、これは私のコントローラクラス私はやっている間違った

public class Controller { 
    public static void main(String[] args) throws Exception { 

      CrawlController controller = new CrawlController("/data/crawl/root"); 


//And I want to crawl all those links that are there in this password protected page    
      controller.addSeed("http://search.somehost.com/"); 

      controller.start(MyCrawler.class, 20); 
      controller.setPolitenessDelay(200); 
      controller.setMaximumCrawlDepth(2); 
    } 
} 

何か....

+0

どこから訪問していますか?ウェブクローラは、適格性のある未訪問のサイトを再帰的に訪問する必要はありません(除外されていないなど)。 –

+0

@Amir Afghani、返信ありがとうございます..私はこのコードを.. http:// code.google.com/p/crawler4j/'で使用しています。これは私が使用しているソースコードです。 'https:// crawler4j.googlecode.com/svn/trunk/crawler4j/src/edu/uci/ics/crawler4j/example/simple /'というクローラにいくつかのクラスが組み込まれています。これはSVNの場所です... – AKIWEB

+0

貼り付けたコードでは、どこに訪問メソッドを呼び出しますか? –

答えて

0

ですhttp://code.google.com/p/crawler4j/でshoudVisit()関数は真または偽を返すだけです。しかし、あなたのコードでは、この関数はページの内容を間違って取得しています。現在のバージョンのcrawler4j(3.0)は、パスワードで保護されたページのクロールをサポートしていません。

+0

それには最高のJavaツール/ libは何ですか? –

+0

@AKIWEB古い投稿を復活させますが、認証の背後にあるWebページをクロールするためのjavaツール/ libは何ですか(Google認証、認証が必要なsites.google.comをクロールする必要があります) – Saurabh