【问题标题】:Crawl all the links of a page that is password protected抓取受密码保护的页面的所有链接
【发布时间】:2011-07-15 16:28:44
【问题描述】:

我正在抓取一个需要用户名和密码进行身份验证的页面。当我在代码中传递我的用户名和密码时,我成功地从服务器获得了该页面的 200 OK 响应。但是一旦返回 200 OK 响应,它就会停止。 它不会在验证后进入该页面以抓取该页面中的所有链接。 And this crawler is taken from @987654321@。 这是我进行身份验证的代码...

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

我做错了什么......

【问题讨论】:

  • 你是从哪里打电话来的?网络爬虫是否不需要递归访问符合条件的未访问网站(例如未排除等)?
  • @Amir Afghani,感谢您的回复。我在我的代码中使用了这个爬虫。http://code.google.com/p/crawler4j/ 这是我正在使用的源代码。这个爬虫内置了几个类..https://crawler4j.googlecode.com/svn/trunk/crawler4j/src/edu/uci/ics/crawler4j/example/simple/.这是 SVN 位置...
  • 在您粘贴的代码中,您在哪里调用访问方法?
  • @Amir Afghani,我从这个位置调用该方法。 https://crawler4j.googlecode.com/svn/trunk/crawler4j/src/edu/uci/ics/crawler4j/crawler/WebCrawler.java.
  • 你确定吗? WebCrawler.java 是您要扩展的,而不是访问的调用站点。

标签: java web-crawler


【解决方案1】:

http://code.google.com/p/crawler4j/ 中所述,shoudVisit() 函数应该只返回 true 或 false。但是在您的代码中,此函数也在获取错误页面的内容。当前版本的 crawler4j (3.0) 不支持爬取密码保护的页面。

【讨论】:

  • 什么是最好的 java 工具/lib?
  • @AKIWEB 复活一个旧帖子,但是什么可以是 java 工具/lib 用于在身份验证后面爬取网页(谷歌身份验证,我必须爬取需要身份验证的 sites.google.com)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 2014-01-10
  • 1970-01-01
  • 2021-11-04
  • 2015-07-01
  • 1970-01-01
相关资源
最近更新 更多