Получение веб-элементов с помощью Jsoup

Я пытаюсь использоватьJsoup чтобы получить данные о запасах с веб-сайта под названием morningstar. Я смотрел на других форумах и не смог выяснить, что не так.

Я пытаюсь сделать более сложную проверку данных, но я не могу даже получить цену. Я либо получаю ноль, либо ничего вообще.

Я знаю о других языках и API, но я хотел бы использоватьJsoup как это кажется очень способным.

Вот что у меня так далеко:

public class Scrape {
    public static void main(String[] args){
        String URL = "http://www.morningstar.com/stocks/xnas/aapl/quote.html";
        Document d = new Document(URL);
        try{
            d = Jsoup.connect(URL).get();
        }catch(IOException e){
            e.printStackTrace();
        }
        Element stuff = d.select("#idPrice gr_text_bigprice").first();
        System.out.println("Price of AAPL: " + stuff);
        }
}

Любая помощь будет оценена.

 cricket_00707 июн. 2016 г., 07:18
Вы уверены, что данные не генерируются динамически с помощью JavaScript?

Ответы на вопрос(1)

вы можете использовать безголовый браузер, такой как HtmlUnithttps://sourceforge.net/projects/htmlunit/

Информация о цене и т. Д. Встроена в iFrame, поэтому сначала мы получаем (также динамически формируемую) ссылку iFrame, а затем анализируем iFrame.

java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(java.util.logging.Level.OFF);

final WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setTimeout(1000);

HtmlPage page = webClient.getPage("http://www.morningstar.com/stocks/xnas/aapl/quote.html");

Document doc = Jsoup.parse(page.asXml());

String title = doc.select(".r_title").select("h1").text();

String iFramePath = "http:" + doc.select("#quote_quicktake").select("iframe").attr("src");

page = webClient.getPage(iFramePath);

doc = Jsoup.parse(page.asXml());

System.out.println(title + " | Last Price [$]: " + doc.select("#last-price-value").text());

печатает:

Apple Inc | Last Price [$]: 98.63

Движок javascript в HtmlUnit довольно медленный (приведенный выше код занимает около 18 секунд на моей машине), поэтому может быть полезно взглянуть на другие движки javascript / безголовые браузеры (phantomJs, так далее.; проверьте этот список вариантов:https://github.com/dhamaniasad/HeadlessBrowsers) для повышения производительности, но HtmlUnit выполняет свою работу. Вы также можете попробовать отфильтровать не относящиеся к делу сценарии, изображения и т. Д.WebConnectionWrapper:

http://htmlunit.10904.n7.nabble.com/load-parse-speedup-tp22735p22738.html

Ваш ответ на вопрос