JSoup: как вывести список ссылок из списка? - PullRequest
0 голосов
/ 19 января 2019

Как я могу перечислить ссылки, но только из тега div?Точнее, list только в этом конкретном div?Каким-то образом ограничить выбор конкретным элементом?

код:

package my.books;

import java.io.File;
import java.net.URI;
import java.util.Properties;
import java.util.logging.Logger;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class App {

    private static final Logger LOG = Logger.getLogger(App.class.getName());
    private Properties properties = new Properties();

    public static void main(String[] args) throws Exception {
        new App().basicJSoup();
    }

    private void basicJSoup() throws Exception {
        properties.loadFromXML(App.class.getResourceAsStream("/properties.xml"));
        LOG.fine(properties.toString());
        URI inputURI = new URI(properties.getProperty("html_input"));
        URI outputURI = new URI(properties.getProperty("output"));

        File input = new File(inputURI);
        Document doc = Jsoup.parse(input, "UTF-8");
        Element sideCategories = doc.select("div.side_categories").first();
        LOG.fine(sideCategories.outerHtml());

        Elements ul = doc.select("div.side_categories > ul");
        Elements li = ul.select("li");

        for (int i = 0; i < li.size(); i++) {
            LOG.info(li.get(i).text());
            LOG.info("i\t\t" + i);
        }
    }

}

1 Ответ

0 голосов
/ 19 января 2019

Если я правильно понимаю ваш вопрос, вам просто нужно составить полный, определенный селектор CSS, например, div.side_categories ul li a.

Например:

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

public class JSoupTest {
    public static void main(String[] args) {
        String markup =
                "<div class=\"side_categories\">" +
                  "<ul>" +
                    "<li>" +
                      "<a href=\"#\">Link 1</a>" +
                    "</li>" +
                    "<li>" +
                      "<a href=\"#\">Link 2</a>" +
                    "</li>" +
                  "</ul>" +
                "</div>";

        Document doc = Jsoup.parse(markup);
        Elements links = doc.select("div.side_categories ul li a");

        for (Element link : links) {
            System.out.println(link);
        }
    }
}

Результат:

<a href="#">Link 1</a>
<a href="#">Link 2</a>
...