如何查找网页的所有元素(仅加载25个而不是全部加载)

时间:2019-04-23 06:50:21

标签: java web-scraping jsoup

我从https://www.brainyquote.com/authors/oscar_wilde中获得所有引号,并将每个元素的文本添加到String类型的List中,一切正常。我的问题是它没有抓住网站上的每个元素。每次只能抓25次。我通过加载引号并打印出列表的大小进行了测试,结果为25。是否有一种方法可以使用jsoup加载每个元素,以便获取所有引号?

这是相关的课程。正如我所说,一切正常。唯一的问题是获取所有引号,而不是仅获取25。注意:忽略我从21开始索引的事实,当我从0开始索引时也会发生同样的情况。

package com.galanjulio.pequitas.quotes;

import com.galanjulio.pequitas.Pequitas;
import lombok.Getter;
import lombok.Setter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class QuoteHandler {

    private Document document;

    private List<String> quotes;

    @Getter
    @Setter
    private int index;

    public QuoteHandler() {
        try {
            document = Jsoup.connect("https://www.brainyquote.com/authors/oscar_wilde").get();
        } catch (IOException e) {
            e.printStackTrace();
        }

        index = 21;
        quotes = new ArrayList<>();

        loadQuotes();
    }

    public String getNextQuote() {
        index++;

        if (index >= quotes.size()) {
            index = 0;
        }

        Pequitas.getInstance().saveSettings();

        return quotes.get(index);
    }

    private void loadQuotes() {
        List<Element> elements = document.getElementsByClass("b-qt");

        for (Element element : elements) {
            quotes.add(element.text());
        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果使用wgetcurl检索该页面,您将看到该页面中实际上只包含26个引号。使用浏览器时看到的其余引号会使用Javascript动态加载。

$ curl -s https://www.brainyquote.com/authors/oscar_wilde | grep b-qt | wc -l
26