私はいくつかのクローラコードを使用しています 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);
URLを取得するために「戻る」を使用しようとすると、次のエラーが表示されます。
The return type is incompatible with WebCrawler.visit(Page)
タイプを「無効」に変更するように私に要求しますが、もちろん、私はしたくありません。
ここには私が問題を抱えている機能があります:
@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;
}
私はまた、ゲッターを使用しようとしましたが、それは "ブロッキング操作"なので、それは動作しません。アイデアがなくなりました。
回答:
回答№1は1メソッドを変更すると、メソッドをオーバーライドすることはできません。メソッドシグネチャ。署名を変更した場合は、新しい方法を作成しています。あなたが望むのは、あなたが訪れたURLのリストで、URLを返す代わりにArrayListに格納し、リストを返すgetterを作成してみてください。