博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[开发笔记]-获取天气数据接口
阅读量:4709 次
发布时间:2019-06-10

本文共 2891 字,大约阅读时间需要 9 分钟。

     之前做的一个小程序需要获取天气预报接口,使用的是中国天气网的免费接口:

http://m.weather.com.cn/data/101010100.html ,但最近发现这个接口的天气数据不更新了,最新的天气是2014年2月19日的。推测可能是加了什么限制,目前网上搜到的大部分天气接口都是这个。

      下面的两个天气接口倒是仍然可以使用,不过一个是获取实时天气情况的,一个是获取当天整体天气情况的。对于需要获取7天内的天气情况,还需要找寻其他接口来实现。

http://www.weather.com.cn/data/sk/101010100.html

http://www.weather.com.cn/data/cityinfo/101010100.html

       通过这几天的测试,终于找到了一个可用的,特提供给大家。

接口获取的就是中天气网的手机版页面中的数据,网址为: 首页-中国天气网 http://mobile.weather.com.cn/index.html。

       数据是通过webclient,get方式来抓取的。这里需要指出一个需要注意的地方。

就是在webClient添加的请求头信息中加入Referer信息,否则获取的天气数据不是当天的。

 

获取的的数据为:

 

 

如果不加Referer头信息,获取到的数据为:

无论你什么时候获取,获取到的都是20131012这天的天气数据。奇怪的是time是最新的,一直在更新的。由此也可以看出来,他们是加了某种过滤机制无法获取真实的当天天气,这也间接解释了为什么上面提到的那个天气接口不能使用了。

说到这里那就再加一句,开头提到的天气接口 http://m.weather.com.cn/data/101010100.html 即使我加了Referer信息也不能获取当天的。

数据抓取代码:

class Program    {        //参考文章:中国天气网的数据接口研究 - Create Chen - 博客园 http://www.cnblogs.com/technology/p/3488176.html        static void Main(string[] args)        {            //实时天气           // string url = "http://mobile.weather.com.cn/data/sk/101010100.html?_=1393644135884";          //穿衣指数            string url = "http://mobile.weather.com.cn/data/zsM/101010100.html?_=1393645156001";            string html = webGetHtml(url);            Console.WriteLine(html);            Console.ReadKey();        }        //get请求        public static string webGetHtml(string url)        {           // string url = "http://www.cnblogs.com/";            // http://www.cnblogs.com/babycool             WebClient client = new WebClient();            //设置发出请求 的URI            client.BaseAddress = url;            //添加到请求头部的信息            //GET / HTTP/1.1            //Accept: text/html, application/xhtml+xml, */*            //Accept-Language: zh-CN            //User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; qdesk 2.4.1263.203; Windows NT 6.1; Trident/5.0)            //Accept-Encoding: gzip, deflate            //Host:             //Connection: Keep-Alive            client.Headers.Add("Accept", "application/json, text/javascript, */*; q=0.01");            client.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");            //注意:Referer 一定要加,否则获取的不是当天的。            client.Headers.Add("Referer", "http://mobile.weather.com.cn/");            client.Headers.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;Chrome/27.0.1453.110; Trident/5.0)");            //client.Headers.Add("Connection", "Keep-Alive");            //client.Headers.Add("Accept-Encoding", "gzip, deflate");            //如果是获取网站的首页的内容 则为 client.OpenRead("/");            //如果是获取网站域名下的非首页的内容 则为client.OpenRead(url);            //获取流数据            Stream webStream = client.OpenRead(url);            StreamReader reader = new StreamReader(webStream, Encoding.UTF8);            //获取html代码            // string html = reader.ReadToEnd();            return reader.ReadToEnd();        }    }

 

 

转载请注明出处。

 

转载于:https://www.cnblogs.com/babycool/p/3575167.html

你可能感兴趣的文章
Git Stash用法
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Jquery radio选中
查看>>
memcached 细究(三)
查看>>
RSA System.Security.Cryptography.CryptographicException
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
String类的深入学习与理解
查看>>
OnePage收集
查看>>
yahoo的30条优化规则
查看>>
[CCF2015.09]题解
查看>>
[NYIST15]括号匹配(二)(区间dp)
查看>>
json_value.cpp : fatal error C1083: 无法打开编译器生成的文件:No such file or directory
查看>>
洛谷 P1101 单词方阵
查看>>
Swift DispatchQueue
查看>>
C#和JAVA 访问修饰符
查看>>
小甲鱼OD学习第1讲
查看>>
HDU-1085 Holding Bin-Laden Captive-母函数
查看>>
php提示undefined index的几种解决方法
查看>>