我正在使用http://code.google.com/p/crawler4j/中的一些抓取代码。
现在,我要做的是从另一个类访问MyCrawler类中找到的每个URL。
我用:
启动抓取工具// * Start the crawl. This is a blocking operation, meaning that your code
// * will reach the line after this only when crawling is finished.
controller.start(MyCrawler.class, numberOfCrawlers);
当我尝试使用“return”来获取我的网址时,我收到此错误:
The return type is incompatible with WebCrawler.visit(Page)
它要求我将类型更改为'void',但当然,我不想这样做。
这是我遇到问题的功能:
@Override
public String visit(Page page) {
url = page.getWebURL().getURL();
System.out.println("URL: " + url);
if (page.getParseData() instanceof HtmlParseData) {
HtmlParseData htmlParseData = (HtmlParseData) page.getParseData();
String text = htmlParseData.getText();
String html = htmlParseData.getHtml();
List<WebURL> links = htmlParseData.getOutgoingUrls();
System.out.println("Text length: " + text.length());
System.out.println("Html length: " + html.length());
System.out.println("Number of outgoing links: " + links.size());
return url;
}
我也尝试使用getter,但因为它是一个“阻塞操作”,所以它不起作用。我的想法已经不多了。
答案 0 :(得分:1)
如果更改方法签名,则无法覆盖方法。如果您更改签名,则表示您正在制作新方法。如果您想要的只是您访问过的网址列表,而不是返回网址,请尝试将它们存储在ArrayList中并创建一个返回列表的getter。