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版的
分享到:
相关推荐
第25章 天气预报模块 641 ...25.3 应用Iframe框架直接获取问天网天气预报 653 25.4 查询各城市未来5天的天气预报、指数预报 653 25.5 获取中国气象局未来72小时城市天气预报 655 25.6 程序调试 660
对于“问天网”的天气预报数据,可能包含城市名、日期、最高温度、最低温度、天气状况、风向风力等多个字段。在PHP中,可以使用数组或者对象来存储这些数据,并进行进一步的处理和展示,例如,将数据格式化为易于...
问天架设视频教程
“阿里灵杰”问天引擎电商搜索算法赛 simcse setenceetransformer “阿里灵杰”问天引擎电商搜索算法赛 simcse setenceetransformer “阿里灵杰”问天引擎电商搜索算法赛 simcse setenceetransformer “阿里灵杰...
此外,报告还探讨了我国量子保密通信行业的竞争格局,包括进入行业的壁垒、竞争格局和主要企业情况,如瑞士ID Quantique公司、安徽问天量子科技股份有限公司等。 企业案例分析,例如国盾量子的经营情况和战略规划,...
联想问天 WR3118 G2 服务器用户手册 操作手册,整机配置资源详解
在“阿里灵杰”问天引擎电商搜索算法赛中获得第二名的方案,主要涉及到的是电商领域的两阶段文本匹配算法。这种算法对于提升电商平台的搜索效率和用户购物体验至关重要。下面将详细介绍这一算法的核心概念、步骤以及...
### 问天全文检索系统WTFTR知识点概览 #### 一、系统概述 - **系统名称**:问天全文检索系统(WTFTR),由问天(北京)信息技术有限公司开发。 - **背景介绍**:随着信息量的爆炸式增长,特别是非结构化数据的增长...
神七问天观后感:中国人向太空进发.doc
“阿里灵杰”问天引擎电商搜索算法赛_132771_WenTianSearch
全国大学生电子设计竞赛(National Undergraduate Electronics Design Contest),试题,解决方案及源码。计划或参加电赛的同学可以用来学习提升和参考。程序均是实战案例,经过测试可直接运行。...
《2022年天池比赛解决方案:阿里问天搜索算法赛》 在2022年的天池比赛中,阿里云举办的“阿里问天搜索算法赛”无疑是一场备受瞩目的技术盛宴。这次比赛旨在挑战参赛者对于大规模数据处理、自然语言理解以及搜索算法...
"阿里灵杰”问天引擎电商搜索算法赛是一个旨在挑战和优化电商领域搜索算法的竞赛。这个比赛可能涉及了各种技术点,包括但不限于自然语言处理(NLP)、信息检索(IR)、机器学习(ML)以及大数据处理等。下面将详细...
8. **线性规划问题的求解**:题目给出了两个线性规划问题,要求求解并写出对偶问题。对于第一个问题,可以通过构建单纯形表进行求解;第二个问题则需要构建初始单纯形表,以确定初始基和非基变量。 9. **最短路径...
kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。 kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、人工智能案例参考。kaggle实战案例,赛事课题内容,解决方案汇总,机器学习、...
这个程序原本依赖于已停服的问天网来获取天气数据。 【描述】提到的问题核心在于,由于原始程序的数据来源——问天网已经停止服务,导致程序无法正常运行。这反映出在开发Web应用时,对外部资源的依赖性可能带来的...
在“阿里灵杰”问天引擎电商搜索算法赛中获得第二名的方案,重点在于电商领域的两阶段文本匹配算法。这种先进的技术对于提升电商平台的用户体验和搜索效率具有至关重要的作用。下面将详细介绍这个算法的核心原理、...
天池阿里灵杰问天引擎电商搜索算法赛非官方_baseline,又名_NLP__从入门到_222771_E-commerce-Search-Recall_222771_E-commerce-Search-Recall.zip
“阿里灵杰”问天引擎电商搜索算法赛_第二名。电商领域两阶段文本匹配算法。_wentian-rank2
在“阿里灵杰”问天引擎电商搜索算法赛中获得第二名的方案,重点在于设计并实现了一种针对电商领域的两阶段文本匹配算法。这种算法是解决电商搜索中用户输入关键词与商品信息进行高效匹配的关键技术,对于提升用户...