Как сохранить этот код повторение более одного раза - PullRequest
0 голосов
/ 22 марта 2020

Мой код тянет ссылки и добавляет их в HashSet. Я хочу, чтобы ссылка заменила исходную ссылку и повторяла процесс, пока не будет найдено новых ссылок для добавления. Программа продолжает работать, но ссылка не обновляется, и программа застревает в бесконечном бездействии. Как получить ссылку для обновления, чтобы программа могла повторяться до тех пор, пока не будет найдено больше ссылок?

package downloader;

import java.io.IOException;
import java.net.URL;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class Stage2 {
    public static void main(String[] args) throws IOException {

        int q = 0;
        int w = 0;


        HashSet<String> chapters = new HashSet();
        String seen = new String("/manga/manabi-ikiru-wa-fuufu-no-tsutome/i1778063/v1/c1");
        String source = new String("https://mangapark.net" + seen);
        //                          0123456789
       while( q == w ) {



        String source2 = new String(source.substring(21));

        String last = new String(source.substring(source.length() - 12));
        String last2 = new String(source.substring(source.length() - 1));


        chapters.add(seen);
        for (String link : findLinks(source)) {

            if(link.contains("/manga") && !link.contains(last) && link.contains("/i") && link.contains("/c") && !chapters.contains(link)) {
            chapters.add(link);
                System.out.println(link);
                seen = link;


                System.out.print(chapters);
                System.out.println(seen);
            }

            }

        }

      System.out.print(chapters);



    }

    private static Set<String> findLinks(String url) throws IOException {

        Set<String> links = new HashSet<>();

        Document doc = Jsoup.connect(url)
                .data("query", "Java")
                .userAgent("Mozilla")
                .cookie("auth", "token")
                .timeout(3000)
                .get();

        Elements elements = doc.select("a[href]");
        for (Element element : elements) {
            links.add(element.attr("href"));
        }


        return links;

    }

}

1 Ответ

0 голосов
/ 22 марта 2020

Ваша программа не остановилась, потому что вы никогда не меняете условия:

while( q == w )

всегда верно. Я запускаю твой код без времени, и я получаю две ссылки, которые печатаются дважды (!), И программа останавливается.

Если тебе нужны ссылки на другие главы, у тебя та же проблема, что и у меня. В элементе

Element element = doc.getElementById("sel_book_1");

ссылки идут после псевдоэлемента :: before. Таким образом, они не будут в вашем документе Jsoup.

Вот мой вопрос к этой теме c:

Как найти тег HTML с псевдоэлементом :: before в jsoup

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...