繁体   English   中英

从天气网站抓取完整的 html 数据

[英]Scrape full html data from weather website

我正在尝试从该网站获取天气数据:

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();}

我正在尝试获取包含温度、风和时间数据的表行:

数据输入尝试获取

但我无法得到它。 我得到的文件不包含这些数据,而且似乎不完整。 我认为这是由于 javascript 生成的 html,但即使使用这种方法:

如何从 WebView 获取网页内容?

我无法得到它。 我不确定 javascript 是问题所在。 任何人都可以帮助我至少尝试确定问题的性质吗?

提前谢谢了。

您尝试解析的页面包含使用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 无法访问它的原因。 要获取您想要的数据,只需直接从 iframe src 解析 URL: https ://www.ilmeteo.it/portale/meteo/previsioni1.php?citta = Magenta&c = 3749&gm =25

现在应该很容易了,但请注意 URL 中的参数gm=25可能代表一个月的第 25 天,因此您必须相应地更改它以获取不同日期的数据。

经过更多的挖掘,有一个 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 以及如何从那里获取其他信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM