www.163.com,首页的栏目里有当地的天气预报。可以猜想,这里的天气预报,应该是根据来访者的ip判断其所在地给出当地的天气情况。问了一些朋友,也证实了这一点。项目里也需要天气预报这个小栏目,同事做过一个(从其他站点抓取的),不过实现不了根据IP显示当地的天气情况,需要用户自行选择,而且抓取的站点属于小站….其可靠性值得怀疑。。所以就萌生了抓取网易的天气预报的想法。。。对页面进行分析。。发现显示天气预报的区域是一个IFrame,IFrame里嵌入了如下链接http://news.163.com/util/position1.html, 对这个地址访问直接跳转到另外一个链接http://news.163.com/weather/news/qx1/56294.html,此链接显示了天气情况,如图:![1.JPG](https://i-blog.csdnimg.cn/blog_migrate/92e7cb450bcdf3d292e2269e9eb6162d.jpeg)
上面的这段js实现了对来访者IP判断并给出了天气预报结果的链接。Js里的此链接: http://202.108.39.152/ipquery,起到的是判断用户所在地的作用,返回的是来访者所在地省份。分析到此,想要的结果差不多就出来了…
在客户端调用这段js获得天气预报结果的链接地址,然后交给服务端来处理。(为什么要交给后台处理,而不是直接显示呢?)因为直接得出的链接页面上,有多余的链接,还应用了样式(如图一),不便为自己所用,所以得处理掉。客户端调用服务端的方法很多,最初使用了Ajax框架Anthem,实现了过后,觉得有点杀鸡用牛刀的感觉。。无聊之余。。就又用CallBack实现了一次。。感觉恰到好处。。后来又发现。。__doPostBack也可以实现客户端调用服务端方法。。看来实现这么一个功能还真是简单。。。
好了到此就实现了,自己想要的结果:(感觉有点遗憾的是只给出了省会城市的天气预报)
![2.JPG](https://i-blog.csdnimg.cn/blog_migrate/759a30cfbaad0da5798d262b2ca3c5f2.jpeg)
前台页面代码Defaul.aspx:
1
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
Default.aspx.cs
"
Inherits
=
"
_Default
"
ResponseEncoding
=
"
GB2312
"
%>
2
<!
DOCTYPE html PUBLIC
"
-//W3C//DTD XHTML 1.0 Transitional//EN
"
"
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd
"
>
3
<
html xmlns
=
"
http://www.w3.org/1999/xhtml
"
>
4
<
head runat
=
"
server
"
>
5
<
title
></
title
>
6
<
script
>
7var city
=
new
Array(
"
安徽
"
,
"
黑龙江
"
,
"
山东
"
,
"
北京
"
,
"
湖北
"
,
"
山西
"
,
"
福建
"
,
"
湖南
"
,
"
陕西
"
,
"
甘肃
"
,
"
吉林
"
,
"
上海
"
,
"
广东
"
,
"
江苏
"
,
"
四川
"
,
"
广西
"
,
"
江西
"
,
"
天津
"
,
"
贵州
"
,
"
辽宁
"
,
"
西藏
"
,
"
海南
"
,
"
内蒙古
"
,
"
新疆
"
,
"
河北
"
,
"
宁夏
"
,
"
云南
"
,
"
河南
"
,
"
青海
"
,
"
浙江
"
,
"
重庆
"
);
8var weaths
=
new
Array(
'
58321
'
,
'
50953
'
,
'
54823
'
,
'
54511
'
,
'
57494
'
,
'
53772
'
,
'
59134
'
,
'
57679
'
,
'
57036
'
,
'
52889
'
,
'
54172
'
,
'
58367
'
,
'
59287
'
,
'
58238
'
,
'
56294
'
,
'
59431
'
,
'
58606
'
,
'
54527
'
,
'
57816
'
,
'
54342
'
,
'
55591
'
,
'
52856
'
,
'
53463
'
,
'
51463
'
,
'
53698
'
,
'
53614
'
,
'
56778
'
,
'
57083
'
,
'
52866
'
,
'
58457
'
,
'
57516
'
);
9
10var NTES_WeatherAddr
=
GetCookie(
"
NTES_WeatherAddr
"
);
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
11
if
(
!
NTES_WeatherAddr)
...
{
12 var loc = GetCookie("theaddr");
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
13 if(!loc)...{
14 document.write("<script type='text/javascript' src='http://202.108.39.152/ipquery'><" + "/script>");
15 }
16}
17
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
18function getCookieVal (offset)
...
{
19 var endstr = document.cookie.indexOf (";", offset);
20 if (endstr == -1)
21 endstr = document.cookie.length;
22 return unescape(document.cookie.substring(offset, endstr));
23}
24
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
25function GetCookie (name)
...
{
26 var arg = name +