jSoupを使用してページをスクラップすると、ページ上のすべてのリンクを集めることができます。jSoupの[Elements from Duplicate URLs]リストから[Remove URLs]を削除しますか?
Elements allLinksOnPage = doc.select("a");
どれが素晴らしいですか。今、このリストから重複したURLを削除するにはどうすればよいでしょうか?私。両方のメインナビゲーションでリンクされている/contact-us.htmlを想像してみてください。
すべての重複したURLが削除されたら、次のステップは、その一意のURLをクロールしてループを継続することです。
これの実用性についての質問。コードの場合。ページ-2.htmlがクロールされたときに
for (Element e : allLinksOnPage) {
String absUrl = e.absUrl("href");
//Asbolute URL Starts with HTTP or HTTPS to make sure it isn't a mailto: link
if (absUrl.startsWith("http") || absUrl.startsWith("https")) {
//Check that the URL starts with the original domain name
if (absUrl.startsWith(getURL)) {
//Remove Duplicate URLs
//Not sure how to do this bit yet?
//Add New URLs found on Page to 'allLinksOnPage' to allow this
//For Loop to continue until the entire website has been scraped
}
}
}
だから、質問されると、ループの最後の部分、想像し、より多くのURLはここに特定し、allLinksOnPage変数に追加されます。
for-loopは、完全なリストの長さ、つまりpage-1.htmlに10個のリンクがあり、page-2.htmlに10個のリンクが続くので、20ページが合計でクロールされます。ループは識別された最初の10個のリンクの長さ、すなわち 'for(Element e:allLinksOnPage)'のコードがトリガーされるまでの間だけ継続しますか?
これはロジックが確定した後は必然的にデータベースになりますが、最初はロジックを純粋にJavaベースにして、DBへの読み書きをたくさん防ぎます。
セットを使用してURLを保存し、すでに処理されている場合はすべてのURLをチェックできます。 btw 'absUrl.startsWith(" http ")|| absUrl.startsWith( "https") 'は冗長です。 'startswith(" https ")の部分を削除することができます –
ありがとう@MadMattsはい正しいです –