私は、ページのパスと次のページに言及するタグの名前クラスを指定するプログラムを書いています。
これが私が試したコードです:
public String pagination_get_link(String path, String pagnNextLink_tag) throws IOException{
Document doc = Jsoup.parse(new File(path), "UTF-8");
Element url = doc.getElementById(pagnNextLink_tag);
String url_s = url.attr("href");
pagination_get_link(url_s,pagnNextLink_tag);
return url_s;
}
ページの例は次のようなページです:ここにリンクの説明を入力してください
ページ付けのすべてのリンクを取得するまでループする再帰メソッドを作成したいと思います。前もって感謝します 。
再帰関数は永久に実行され続けます。これにより、プログラムがスタックメモリを使い果たしてクラッシュするはずです。要素が見つからないためにクラッシュしない場合でも、このような場合に例外をキャッチすることに依存しているとは感じません。良い考えのように。
再帰ループを作成する場合、結果を返す必要があり、「完了」した場合は関数自体を再度呼び出す必要はありません。
つまり、処理するデータがこれ以上ない場合は、それを実行する必要があります。これで、クラッシュするまでループを実行し続けることができます。
メソッドをどのように機能させるかはよくわかりませんが、正直なところ、この場合は再帰が必要ないようです。通常のwhileループなどを使用することをお勧めします。
編集:
再帰コードを本当に使用したい場合は、url_s
が空の場合に関数を呼び出す前に戻ると、次のようなトリックが実行されます...
public String pagination_get_link(String path, String pagnNextLink_tag) throws IOException{
Document doc = Jsoup.parse(new File(path), "UTF-8");
Element url = doc.getElementById(pagnNextLink_tag);
String url_s = url.attr("href");
// Not sure how to check if its empty, so change it to what you need.
if(url_s == "") {
return "";
}
pagination_get_link(url_s,pagnNextLink_tag);
return url_s;
}
IDなどで要素を取得しようとすると例外がスローされる可能性があります。その場合は、取得を試みる前に、要素が存在するかどうか、「href」属性があるかどうかを確認したいと思います。そうではなく、その時点で戻ってください。
また、結果には何もしないため、関数から文字列を返す必要はありません。それを無効に変更し、return;
戻ってくるはずのときにちょうど。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加