抓出问天网的城市天气

package com.ice.weather.util;import java.io.bufferedreader;import java.io.inputstreamreader;import java.net.url;import java.util.arraylist;import java.util.calendar;import java.util.date;import java.util.list;import java.util.regex.matcher;import java.util.regex.pattern;import java.text.simpledateformat;import com.ice.weather.bean.weather;public class openurl {	@suppresswarnings("deprecation")	public static void main(string[] args) throws exception{		openurl openurl = new openurl();		list<weather> list = openurl.getweatherbyurl("http://weather.tq121.com.cn/detail.php?city=武汉");		for (weather w : list) {			system.out.println("时间:" + w.getdate().tolocalestring());			system.out.println("天气信息:" + w.getweatherinfo());			system.out.println("温度:" + w.gettemperature());			system.out.println("风速信息:" + w.getwindinfo());		}	}		/**	 * 根据连接抓出5天天气	 */	public list<weather> getweatherbyurl(string url){		try {			string content = getcontent(url);			list<weather> list = getweathers(content);			list.addall(getweathersback(content));			return list;		} catch (exception e) {			system.out.println(e);			return new arraylist<weather>();		}	}	/**	 * 根据连接地址抓出页面内容	 * @param 根据一个连接地址	 * @return 页面内容	 */	private string getcontent(string strurl){		try {			url url = new url(strurl);			bufferedreader br = new bufferedreader(new inputstreamreader(url.openstream()));			string s = "";			stringbuffer sb=new stringbuffer();			while((s = br.readline())!=null)				sb.append(s+"\r\n");			br.close();			return sb.tostring();		} catch(exception e) {			return "error open url" + strurl;		}	}	/**	 * 取当前3天内的天气情况	 * content 为页面内容	 */	private list<weather> getweathers(string content) throws exception {		list<weather> weatherlist = new arraylist<weather>();		int o = 6;		string[] s = analysis("<td width=\"215\" align=\"center\" valign=\"middle\"><span class=\"big-cn\">(.*?)</span></td>", content , o);		weather weather;		for (int i = 0; i < o; i += 2) {			weather = new weather();			weather.setdate(conversiondate(s[i]));			weather.settemperature(s[i + 1]);			weatherlist.add(weather);		}		s = analysis("align=\"center\" valign=\"top\"><img src=\"../images/a(.*?).gif\" width=\"70\" height=\"65\"></td>" , content , o);		s = conversionweather(s);		o = 3;		for (int i = 0; i < o; i++) 			weatherlist.get(i).setweatherinfo(s[i]);		s = analysis("<td width=\"215\" align=\"center\" valign=\"middle\"><span class=\"cn\">(.*?)</span></td>", content , o);		for (int i = 0; i < o; i++)			weatherlist.get(i).setwindinfo(s[i]);		return weatherlist;	}	private list<weather> getweathersback(string content) throws exception {		list<weather> weatherlist = new arraylist<weather>();		int o = 2;		string[] s = analysis("<td width=\"121\"><span class=\"cn\">(.*?)</span></td>" , content , o);		weather weather;		for (int i = 0; i < o; i++) {			weather = new weather();			weather.setdate(conversiondate(s[i]));			weatherlist.add(weather);		}				s = analysis("<td width=\"86\" class=\"cn\"><span class=\"wendu\">(.*?)</span></td>" , content , o);		for (int i = 0; i < o; i++)			weatherlist.get(i).settemperature(s[i]);				s = analysis("<td width=\"157\"><span class=\"cn\">(.*?)</span></td>" , content , o);		for (int i = 0; i < o; i++)			weatherlist.get(i).setwindinfo(s[i]);			s = analysis("<img src=\"../images/b(.*?).gif\" width=\"50\" height=\"46\"></td>" , content , o*2);		s = conversionweather(s);		for (int i = 0; i < o; i++)			weatherlist.get(i).setweatherinfo(s[i]);				return weatherlist;	}	/**	 * 根据爬出到日期转换当前时间	 */	private date conversiondate(string date) throws exception {		simpledateformat dateformat = new simpledateformat("mm月dd日");		date d = dateformat.parse(date);		calendar c = calendar.getinstance();		c.settime(d);		c.set(calendar.year, calendar.getinstance().get(calendar.year));		return c.gettime();	}	/**	 * 根据页面内容和正则表达式来分析页面,得到分析结果	 * @param pattern 正则表达式	 * @param match 页面内容	 * @return content 结果	 */	private string[] analysis(string pattern, string match , int i) {		pattern sp = pattern.compile(pattern);	    matcher matcher = sp.matcher(match);	    string[] content = new string[i];	    for (int i1 = 0; matcher.find(); i1++)	    	content[i1] = matcher.group(1).trim();	    return content;	}	/**	 * 转换天气情况	 * @param s 图片信息	 * @return 天气情况	 */	private string[] conversionweather(string s[]) {		string[] s1 = {"晴天", "多云", "阴", "阵雨", "雷阵雨", "雷阵雨并伴有冰雹", "雨加雪", "小雨", "中雨", "大雨", "暴雨", "大暴雨", "特大暴雨", "阵雪", "小雪", "中雪", "大雪", "暴雪", "雾", "冻雨", "沙尘暴", "小雨-中雨", "中雨-大雨", "大雨-暴雨", "暴雨-大暴雨", "大暴雨-特大暴雨", "小雪-中雪", "中雪-大雪", "大雪-暴雪", "浮尘", "扬沙", "强沙尘暴"};		string[] s2 = new string[s.length/2];		int i1 = 0;		for (int i = 0; i < s.length; i += 2){			if (s[i].trim().equals(s[i+1].trim()))				s2[i1] = s1[integer.parseint(s[i])];			else				s2[i1] = s1[integer.parseint(s[i])] + "转" + s1[integer.parseint(s[i+1])];			i1++;		}		return s2;	}}


package com.ice.weather.bean;import java.util.date;public class weather {	private date date;	private string temperature;	private string weatherinfo;	private string windinfo;	public date getdate() {		return date;	}	public void setdate(date date) {		this.date = date;	}	public string gettemperature() {		return temperature;	}	public void settemperature(string temperature) {		this.temperature = temperature;	}	public string getweatherinfo() {		return weatherinfo;	}	public void setweatherinfo(string weatherinfo) {		this.weatherinfo = weatherinfo;	}	public string getwindinfo() {		return windinfo;	}	public void setwindinfo(string windinfo) {		this.windinfo = windinfo;	}}

最新修改过了··代码跟简洁...下午应该做一个js版的
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值