如何在crawler4j中与sysevisit()方法相关



我想将参数传递给crawler4j中的()方法。我在GitHub上看到了使用工厂方式的文档库页面的示例,但我无法理解。请有人提供一个示例示例来实现

变体1:将其他参数注入构造函数参数

除了shouldVisit(...)的方法参数以外,还需要以构造函数参数传递到每个WebCrawler类中。

这意味着,您可以使用factory类:

进行以下操作以实现它。

MyWebCrawler.class带有两个自定义参数(customArgument1customArgument2):

public class MyWebCrawler extends WebCrawler {
    private final String customArgument1;
    private final String customArgument2;
    public MyWebCrawler(String customArgument1, String customArgument2) {
        this.customArgument1 = customArgument1;
        this.customArgument2 = customArgument2; 
    }
    @Override
    public boolean shouldVisit(Page referringPage, WebURL url) {
        String href = url.getURL().toLowerCase();
        return customArgument1.equals(href) || customArgument2.equals(href);;
    }
    @Override
    public void visit(Page page) {
        //do something
    }
}

为此,factory应该是这样的:

public class MyCrawlerFactory implements CrawlController.WebCrawlerFactory<MyWebCrawler> {
        public MyCrawlerFactory newInstance() throws Exception {
        return new MyCrawlerFactory("some argument", "some other argument");
    }
}

每次创建MyWebCrawler的新实例时,您都可以传递自定义参数。

要使用工厂,您将从CrawlController开始爬行过程:

controller.start(new MyCrawlerFactory(), numberOfCrawlers);

可以在官方GitHub存储库中找到类似的工作示例。

变体2:使用CrawlController#getCustomData()(已弃用)

您可以在CrawlController对象上使用customData将其他数据注入Web-Crawler对象。但是,这是弃用的方式,可以在crawler4j的将来发行中删除。

相关内容

  • 没有找到相关文章

最新更新