Очистить полные html данные с сайта погоды - PullRequest
0 голосов
/ 25 января 2020

Я пытаюсь получить данные о погоде с этого сайта:

https://www.ilmeteo.it/meteo/Magenta/previsioni-orarie?refresh_ce

с кодом:

 try {
                int i = 0;
                if (googlefirst3.startsWith("http")) {
                    Document document = Jsoup.connect("https://www.ilmeteo.it/meteo/Magenta/previsioni-orarie?refresh_ce").userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11 Firefox/19.0").timeout(0).get();
                    Elements temp = document.select("tr");

                    String verifica;
                    verifica=document.html();
                    for (Element movielist : temp) {
                        i++;
                        html = (i + "|||" + movielist.getElementsByTag("td").first().html());
                        array3b[i] = html;

                    }
                }

            } catch (IOException e) {
                e.printStackTrace();}

I Я пытаюсь получить строки таблицы с данными о температуре, ветре и времени:

dataimtryingtoget

, но я не могу его получить. Документ, который я получаю, не содержит этих данных и кажется неполным. Я думал, что это связано с javascript сгенерированным html, но даже с этим методом:

Как мне получить содержимое веб-страницы из WebView?

Я не смог получить это. Я не уверен, что проблема javascript. Кто-нибудь может помочь мне хотя бы попытаться определить природу проблемы?

Большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 25 января 2020

После еще нескольких копаний есть iFrame

Вы можете попробовать что-то вроде этого

Thread(Runnable {

        val document: Document =
            Jsoup.connect("https://www.ilmeteo.it/meteo/Magenta/previsioni-orarie?refresh_ce")
                .userAgent("Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11 Firefox/19.0")
                .timeout(2000).get()




        val body = document.body()
        val table = body.getElementsByClass("datatable")


        val iframe: Element = body.getElementById("frmprevi")
        val iframeSrc: String = iframe.attr("src")

        if (iframeSrc != null) {
            val iframeContentDoc = Jsoup.connect(iframeSrc).get()
            val temps = iframeContentDoc.body().getElementsByClass("boldval")
            for(temp in temps)
            {
                Log.d("temps",temp.text())
            }
        }



    }).start()

Это в kotlin, но я думаю, вы поймете, как перевести его на java и как получить оттуда другую информацию.

2 голосов
/ 25 января 2020

Страница, которую вы пытаетесь проанализировать, включает в себя контент с данными, используя iframe.

<iframe name="frmprevi" id="frmprevi" 
src="https://www.ilmeteo.it/portale/meteo/previsioni1.php?citta=Magenta&amp;c=3749&amp;gm=25" 
width="660" height="600" marginheight="0" marginwidth="0" scrolling="no"
frameborder="0" style="margin:0px;padding:0px"></iframe>

Именно поэтому он недоступен для Jsoup. Чтобы получить нужные данные, просто проанализируйте URL-адрес из iframe sr c: https://www.ilmeteo.it/portale/meteo/previsioni1.php?citta=Magenta&c=3749&gm=25

Теперь это должно быть легко, но имейте в виду, что параметр gm=25 в URL-адрес может представлять 25-й день месяца, поэтому вам придется соответствующим образом изменить его, чтобы получить данные за другой день.

...