package tos.app.query.tools.weather.domain;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class WeatherReport {
public WeatherReport() {
super();
}
private static String getSoapRequest(String city) {
StringBuilder sb = new StringBuilder();
sb
.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>"
+ "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
+ "xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" "
+ "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+ "<soap:Body> <getWeatherbyCityName xmlns=\"http://WebXml.com.cn/\">"
+ "<theCityName>" + city
+ "</theCityName> </getWeatherbyCityName>"
+ "</soap:Body></soap:Envelope>");
return sb.toString();
}
/**
* 用户把SOAP请求发送给服务器端,并返回服务器点返回的输入流
*
* @param city
* 用户输入的城市名称
* @return 服务器端返回的输入流,供客户端读取
* @throws Exception
*/
private static InputStream getSoapInputStream(String city) throws Exception {
try {
String soap = getSoapRequest(city);
if (soap == null) {
return null;
}
URL url = new URL(
"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx");
URLConnection conn = url.openConnection();
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Length", Integer.toString(soap
.length()));
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
conn.setRequestProperty("SOAPAction",
"http://WebXml.com.cn/getWeatherbyCityName");
OutputStream os = conn.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os, "utf-8");
osw.write(soap);
osw.flush();
osw.close();
InputStream is = conn.getInputStream();
return is;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 对服务器端返回的XML进行解析
*
* @param city
* 用户输入的城市名称
* @return 字符串 用,分割
*/
public static String getWeather(String city) {
try {
Document doc;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream is = getSoapInputStream(city);
doc = db.parse(is);
NodeList nl = doc.getElementsByTagName("string");
StringBuffer sb = new StringBuffer();
for (int count = 0; count < nl.getLength(); count++) {
Node n = nl.item(count);
if(n.getFirstChild().getNodeValue().equals("查询结果为空!")) {
sb = new StringBuffer("#") ;
break ;
}
sb.append(n.getFirstChild().getNodeValue() + "#\n");
}
is.close();
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) throws Exception {
System.out.println(getWeather("长沙"));
System.out.println("po&oi".split("&").length) ;
System.out.println("##".split("#").length) ;
}
}
package tos.app.query.tools.weather.domain;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WeatherServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8") ;
String city = request.getParameter("city") ;
String info = WeatherReport.getWeather(city) ;
request.setAttribute("info", info) ;
request.getRequestDispatcher("/weatherInfo.jsp").forward(request, response) ;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response) ;
}
}
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>城市天气信息</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<LINK rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/views/common/styles/style.css">
</head>
<body>
<%
String info = (String) request.getAttribute("info") ;
if(info.equals("#")) {
%>
<h1>该城市暂不被支持天气预报服务</h1>
<%
} else {
String[] infos = info.split("#") ;
%>
<table border="1">
<tr>
<td colspan="3">
<strong><font color="blue">72小时天气预报</font>
<font color="red">
<!-- 城市名称 -->
<%=infos[0]%> <%=infos[1]%>
</font>
<font size="-1">
<%=infos[4] %>发布
</font>
</strong>
</td>
</tr>
<tr align="center">
<td>
<table>
<tr align="center">
<!-- 日期 -->
<td>
<font size="-1">
<%=infos[6] %>
</font>
</td>
</tr>
<tr align="center">
<!-- 天气图标 -->
<td>
<img src="<%=request.getContextPath()%>/images/a_<%=infos[8]%>" />
<img src="<%=request.getContextPath()%>/images/a_<%=infos[9]%>" />
</td>
</tr>
<tr align="center">
<!-- 天气细则 -->
<td>
<font size="-1">
<%=infos[5] %><br>
<%=infos[7] %><br>
</font>
</td>
</tr>
</table>
</td>
<td>
<table align="center">
<tr align="center">
<td>
<!-- 第二天的时间 -->
<font size="-1">
<%=infos[13] %>
</font>
</td>
</tr>
<tr align="center">
<td>
<!-- 第二天的天气图标 -->
<img src="<%=request.getContextPath()%>/images/a_<%=infos[15]%>">
<img src="<%=request.getContextPath()%>/images/a_<%=infos[16]%>">
</td>
</tr>
<tr align="center">
<td>
<!-- 第二天的天气细则 -->
<font size="-1">
<%=infos[12] %><br>
<%=infos[14] %><br>
</font>
</td>
</tr>
</table>
</td>
<td>
<table align="center">
<tr align="center">
<td>
<!-- 第三天的天气时间 -->
<font size="-1">
<%=infos[18] %>
</font>
</td>
</tr>
<tr align="center">
<td>
<!-- 第三天的天气图标 -->
<img src="<%=request.getContextPath()%>/images/a_<%=infos[20]%>" />
<img src="<%=request.getContextPath()%>/images/a_<%=infos[21]%>" />
</td>
</tr>
<tr align="center">
<td>
<!-- 第三天的天气细则 -->
<font size="-1">
<%=infos[17] %><br>
<%=infos[19] %><br>
</font>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3">
<!-- 居家指数 -->
<strong><font color="blue">温馨提醒</font></strong>
</td>
</tr>
<tr>
<td colspan="3">
<table>
<tr>
<td>
<img src="<%=request.getContextPath()%>/images/sun.gif" />
</td>
<td>
<font size="-1">
<%=infos[10] %>
</font>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="3">
<%
String str = "" ;
String s1 = "" ;
String s1Content = "" ;
String s2 = "" ;
String s2Content = "" ;
String s3 = "" ;
String s3Content = "" ;
String s4 = "" ;
String s4Content = "" ;
String s5 = "" ;
String s5Content = "" ;
String s6 = "" ;
String s6Content = "" ;
String s7 = "" ;
String s7Content = "" ;
try {
//这里开始进行具体详细测试
str = infos[11] ;
//穿衣指数
s1 = str.substring(str.indexOf("穿衣指数:"),str.indexOf("穿衣指数:")+4) ;
s1Content = str.substring(str.indexOf("穿衣指数:")+5,str.indexOf("感冒指数:")) ;
//感冒指数
s2 = str.substring(str.indexOf("感冒指数:"),str.indexOf("感冒指数:")+4) ;
s2Content = str.substring(str.indexOf("感冒指数:")+5,str.indexOf("晨练指数:")) ;
//晨练指数
s3 = str.substring(str.indexOf("晨练指数:"),str.indexOf("晨练指数:")+4) ;
s3Content = str.substring(str.indexOf("晨练指数:")+5,str.indexOf("交通指数:")) ;
//交通指数
s7 = str.substring(str.indexOf("交通指数:"),str.indexOf("交通指数:")+4) ;
s7Content = str.substring(str.indexOf("交通指数:")+5,str.indexOf("中暑指数:")) ;
//中暑指数
s4 = str.substring(str.indexOf("中暑指数:"),str.indexOf("中暑指数:")+4) ;
s4Content = str.substring(str.indexOf("中暑指数:")+5,str.indexOf("防晒指数:")) ;
//防晒指数
s5 = str.substring(str.indexOf("防晒指数:"),str.indexOf("防晒指数:")+4) ;
s5Content = str.substring(str.indexOf("防晒指数:")+5,str.indexOf("旅行指数:")) ;
//旅行指数
s6 = str.substring(str.indexOf("旅行指数:"),str.indexOf("旅行指数:")+4) ;
s6Content = str.substring(str.indexOf("旅行指数:")+5) ;
%>
<table>
<tr>
<td width="50">
<img src="<%=request.getContextPath()%>/images/zhishu_01.gif" />
</td>
<td>
<strong>
<font size="-1">
<%=s1 %>
</font>
</strong>
</td>
<td>
<font size="-1">
<%=s1Content %>
</font>
</td>
</tr>
<tr>
<td width="50">
<img src="<%=request.getContextPath()%>/images/zhishu_20.gif" />
</td>
<td>
<strong>
<font size="-1">
<%=s2 %>
</font>
</strong>
</td>
<td>
<font size="-1">
<%=s2Content %>
</font>
</td>
</tr>
<tr>
<td width="50">
<img src="<%=request.getContextPath()%>/images/zhishu_03.gif" />
</td>
<td>
<strong>
<font size="-1">
<%=s3 %>
</font>
</strong>
</td>
<td>
<font size="-1">
<%=s3Content %>
</font>
</td>
</tr>
<tr>
<td width="50">
<img src="<%=request.getContextPath()%>/images/zhishu_22.gif" />
</td>
<td>
<strong>
<font size="-1">
<%=s4 %>
</font>
</strong>
</td>
<td>
<font size="-1">
<%=s4Content %>
</font>
</td>
</tr>
<tr>
<td width="50">
<img src="<%=request.getContextPath()%>/images/zhishu_07.gif" />
</td>
<td>
<strong>
<font size="-1">
<%=s5 %>
</font>
</strong>
</td>
<td>
<font size="-1">
<%=s5Content %>
</font>
</td>
</tr>
<tr>
<td width="50">
<img src="<%=request.getContextPath()%>/images/zhishu_31.gif" />
</td>
<td>
<strong>
<font size="-1">
<%=s6 %>
</font>
</strong>
</td>
<td>
<font size="-1">
<%=s6Content %>
</font>
</td>
</tr>
<tr>
<td width="50">
<img src="<%=request.getContextPath()%>/images/zhishu_11.gif" />
</td>
<td>
<strong>
<font size="-1">
<%=s7 %>
</font>
</strong>
</td>
<td>
<font size="-1">
<%=s7Content %>
</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
<%
} catch(Exception e) {
}
%>
<%
}
%>
</body>
</html>
分享到:
相关推荐
自己写的爬虫程序, 可以从网站抓取有用的信息供自己使用,这个程序抓取了天气信息,通过正则匹配实现。可供PHPer学习使用
这是一个用Python编写抓取天气预报的代码示例,用python写天气查询软件程序很简单。这段代码可以获取当地的天气和、任意城市的天气预报,原理是根据url找到网站截取相应的数据展现。 python抓取广州天气并分析 实例...
总的来说,"jsp 抓取天气"是一个关于如何使用JSP和网络爬虫技术从特定网站获取天气信息的实例。开发者需要理解JSP的页面生命周期、HTTP协议、HTML解析以及异常处理等多个知识点。这个项目可以作为学习JSP和网络爬虫...
结合标签“Python开发-Web爬虫”,我们可以推断这个项目是用Python进行Web开发的一个实例,特别是使用了网络爬虫技术来抓取互联网上的天气数据。Python因其简洁的语法和丰富的库(如requests用于HTTP请求,...
在这个"Jsoup爬取中国天气的简单实例"中,我们将深入探讨如何利用Jsoup进行网页抓取,特别是针对中国天气网站。这个实例非常适合对网络爬虫感兴趣的初学者,因为它提供了直观且易于理解的代码示例。 首先,让我们...
这个项目的核心在于利用网络技术与数据解析技术,将互联网上的天气预报数据抓取下来,并在用户界面上进行展示。下面我们将深入探讨易语言和实现天气预报功能的相关知识点。 1. **易语言**: 易语言是一种中国本土...
天气预报和图片预览功能(实例) 环境:VS2008(VS2005,2008均可打开) 图片预览,引用别人的!由于同项目就顺便发出! 天气预报:抓取HTML,分析!
这个压缩包"ASP网站实例开发源码——仿114la天气(源码+数据库).zip"提供了一个完整的ASP应用实例,其目标是模仿114la天气查询网站的功能。114la是一个知名的在线服务平台,其中包括各种生活信息查询,其中天气查询是...
这个实例开发源码——仿114la天气爬取,是基于ASP技术实现的一个天气信息抓取程序,旨在帮助开发者理解如何在ASP中进行网页数据的爬取和处理。 1. ASP基础: ASP由微软在1996年推出,主要用于构建动态网站。它允许...
首先,创建一个`HttpClient`实例,然后调用其`GetAsync`或`PostAsync`方法来获取或发送数据。记得处理异步操作,以避免阻塞UI线程。 2. **JSON解析**:大多数天气API会返回JSON格式的数据。在C#中,可以使用`System...
标签".net 抓取 实例"表明这个项目涉及到了网络数据抓取。在网络抓取中,程序通常会模拟浏览器发送HTTP请求到特定的天气预报网站,然后解析返回的HTML或JSON数据来获取天气信息。这可能涉及到如HttpClient类的使用,...
实例031 抓取网站整页面 109 实例032 电子石英钟 113 实例033 图片自动播放 115 实例034 MP3播放器 118 实例035 播放FLV文件 121 实例036 Flash播放器 125 第4章 报表打印技术 实例037 自定义横向或...
实例031 抓取网站整页面 109 实例032 电子石英钟 113 实例033 图片自动播放 115 实例034 MP3播放器 118 实例035 播放FLV文件 121 实例036 Flash播放器 125 第4章 报表打印技术 实例037 自定义...
//获取天气 $url = 'http://m.weather.com.cn/data/'; $id = '101181101'; //焦作的代号 $data = file_get_contents($url . $id .'.html'); $obj=json_decode($data); echo $obj->weatherinfo->city.'...
它可能实现了从网络上抓取天气信息的逻辑,然后展示给用户。"启儿天气.lnk"可能是一个快捷方式,用于启动这个应用程序,方便用户使用。"readme.txt"文件通常包含有关项目的基本信息,如使用方法、注意事项等,而...
这段代码是一个Python爬虫程序,用于抓取特定地区的全年...总的来说,这个代码实例展示了如何利用Python进行网络爬虫,获取并处理特定地区的天气数据。对于想要学习爬虫和数据分析的人来说,这是一个很好的实践案例。
实例031 抓取网站整页面 109 实例032 电子石英钟 113 实例033 图片自动播放 115 实例034 MP3播放器 118 实例035 播放FLV文件 121 实例036 Flash播放器 125 第4章 报表打印技术 实例037 自定义...
- **目标**:自动化地从天气网站上抓取当地天气信息,包括温度、湿度、风力等。 - **步骤**: 1. 向气象网站发送HTTP请求获取数据。 2. 解析HTML页面提取关键信息。 3. 存储数据。 - **注意点**:有些天气网站...
本篇将深入探讨两种实现方式:通过HTTP客户端请求API接口获取XML数据以及利用HTMLUnit解析网页源码抓取天气信息。 首先,我们来看第一种方法,通过HTTP客户端请求中央气象台API接口获取XML数据。Java提供了多种HTTP...