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版的
3752

被折叠的 条评论
为什么被折叠?



