我正在尝试从该网站获取天气数据:
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引起的,但即使使用此方法也是如此:
How do I get the web page contents from a WebView?
我无法获得它。我不确定javascript是问题所在。 有人可以帮助我至少也尝试找出问题的本质吗?
非常感谢。
答案 0 :(得分:2)
您尝试解析的页面包含使用iframe
的内容和数据。
<iframe name="frmprevi" id="frmprevi"
src="https://www.ilmeteo.it/portale/meteo/previsioni1.php?citta=Magenta&c=3749&gm=25"
width="660" height="600" marginheight="0" marginwidth="0" scrolling="no"
frameborder="0" style="margin:0px;padding:0px"></iframe>
这就是为什么Jsoup无法访问它的原因。要获取所需的数据,只需直接从iframe src中解析网址: https://www.ilmeteo.it/portale/meteo/previsioni1.php?citta=Magenta&c=3749&gm=25
现在应该很容易了,但是请注意,URL中的参数gm=25
可能代表一个月的第25天,因此您必须进行相应的更改才能获取不同日期的数据。
答案 1 :(得分:2)
在进一步挖掘之后,出现了一个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以及如何从中获取其他信息。