java抓取网页的天气预报温度

意随行 2013-09-02 03:53:50
我需要从一个网站上获取天气预报的温度值,我选择了新浪网

程序如下

package tianqi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.IOException;
import java.util.Iterator;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class zhuaqutianqi
{
public static void main(String[] args) throws Exception
{
String getUrl = "http://www.sina.com.cn/";

Document doc = Jsoup.connect(getUrl).timeout(1000).get();
Element body = doc.body();
Elements el=body.select("span[class]");
Iterator it = el.iterator();
String[]s=new String[100];

int i=0;
while( it .hasNext() )
{
Element e = (Element) it.next();
s[i]=e.text();
i++;
System.out.println(s[i] );

}

}

}

为什么结果为空

<span class="now-wea-val">27~18</span>

这个是那个网页的标签,我需要那个27~18度,求各位神帮忙修改一下程序
求各位直接改吧,已经听过很多方法了,可是试了都不行,小弟是初学者,求各位大神帮个忙
...全文
343 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 11 楼 u011573355 的回复:
[quote=引用 9 楼 fangmingshijie 的回复:] 这个新郎只有<div id="SI_Weather_Wrap" class="now-wea-wrap clearfix"></div> 里面的内容是动态通过js加载的,源文件看不到。
大神能给我解释一下吗?就是那个源文件看不了是怎么回事,还有我抓新浪网的天气的时候,如果不加限制条件是抓到了许多地方的天气,但是哪些地方的天气页面上都没有,我打开的页面是北京地区的,抓取的却没有显示北京地区的,虚心求教,只想弄明白,您帮我改的那个程序已经成功了,非常感谢! 另外,我看你省掉了那个iterator遍历,那什么情况需要用到这个?[/quote]遍历集合用iterator,doc.select("td").get(2)这个已经指定获取第二个td了,所以就不用遍历了。源代码看不到那个东西很正常,因为他是动态添加的span。是通过另外一个页面加进来的。
失落夏天 2013-09-03
  • 打赏
  • 举报
回复
你这么费劲干嘛,不是有天气的API接口么。 参见下:http://blog.sina.com.cn/s/blog_7bac470701014tbe.html
意随行 2013-09-03
  • 打赏
  • 举报
回复
引用 9 楼 fangmingshijie 的回复:
这个新郎只有<div id="SI_Weather_Wrap" class="now-wea-wrap clearfix"></div> 里面的内容是动态通过js加载的,源文件看不到。
大神能给我解释一下吗?就是那个源文件看不了是怎么回事,还有我抓新浪网的天气的时候,如果不加限制条件是抓到了许多地方的天气,但是哪些地方的天气页面上都没有,我打开的页面是北京地区的,抓取的却没有显示北京地区的,虚心求教,只想弄明白,您帮我改的那个程序已经成功了,非常感谢! 另外,我看你省掉了那个iterator遍历,那什么情况需要用到这个?
  • 打赏
  • 举报
回复
你用中国天气网的吧。
String getUrl = "http://www.weather.com.cn/html/weather/101190101.shtml";

		Document doc = Jsoup.connect(getUrl).timeout(0).get();
		Element el = doc.select("td").get(2);
		System.out.println(el.text());
  • 打赏
  • 举报
回复
这个新郎只有<div id="SI_Weather_Wrap" class="now-wea-wrap clearfix"></div> 里面的内容是动态通过js加载的,源文件看不到。
意随行 2013-09-02
  • 打赏
  • 举报
回复
引用 6 楼 fangmingshijie 的回复:
那你肯定没有解析到这个class
大神你一定要帮帮我,马上我就要去找导师交差了,java确实是我的刚学的,所以自己研究时间不够了
意随行 2013-09-02
  • 打赏
  • 举报
回复
引用 6 楼 fangmingshijie 的回复:
那你肯定没有解析到这个class
你应该能看到我这个程序,你看看应该怎么改,麻烦了
  • 打赏
  • 举报
回复
那你肯定没有解析到这个class
意随行 2013-09-02
  • 打赏
  • 举报
回复
引用 4 楼 fangmingshijie 的回复:
[quote=引用 3 楼 fangmingshijie 的回复:] Elements el=body.select("span[class]");//这里指定class值就行了,比如 Elements el=body.select("span..now-wea-val");
多一个点。 Elements el=body.select("span.now-wea-val");[/quote] 不行啊,那样运行完了就什么也不显示了
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
Elements el=body.select("span[class]");//这里指定class值就行了,比如 Elements el=body.select("span..now-wea-val");
多一个点。 Elements el=body.select("span.now-wea-val");
  • 打赏
  • 举报
回复
Elements el=body.select("span[class]");//这里指定class值就行了,比如 Elements el=body.select("span..now-wea-val");
意随行 2013-09-02
  • 打赏
  • 举报
回复
引用 1 楼 ldh911 的回复:
while循环体修改下试试看: while( it .hasNext() ) { Element e = (Element) it.next(); s[i]=e.text(); System.out.println(s[i]); i++; }
确实有东西了,不过是好多城市的天气温度,大哥能否帮个忙,我只想得到北京那个温度,如何做?
MiceRice 2013-09-02
  • 打赏
  • 举报
回复
while循环体修改下试试看: while( it .hasNext() ) { Element e = (Element) it.next(); s[i]=e.text(); System.out.println(s[i]); i++; }

50,535

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧