如何置天气预报?
这个问题似乎有点久远了,不过还是答一下吧。 当时我们组负责全国气象的集成系统(也就是将各个源的气象数据整合在一起),为了做预报,我们需要每个小时从中国气象局下的各省份中心获取全省的气象观测数据、预报数据以及海洋监测数据等,然后自己做预处理并利用各种算法做分析,最终输出我们自己的预报结果。
在获取数据的过程中我们发现,由于中国气象局的网站开放了部分接口,因此我们可以通过编程的方式直接调用接口获取数据;但是在中国气象局的站点之外还有一些网站也提供各省的气象信息,而且这些信息在其他网站上都是付费的,为此我们还特地去买了数据库来存储这些付费的信息,同时为了防止数据过时,还需要手动定期下载更新。
当然,这些网站开放的接口有限,有的只开放了几个小时之内的历史数据(比如说一个小时之内)或者是一天的历史数据(比如说一天之内)的接口,要想获得更长时间的历史数据就必须付费。 当时我们的想法是,如果能把所有的天气数据都收集起来,然后再利用某些方法自行预测未来的一段时间内(比如一周)的天气情况该多好啊!这样就能做到实时观看天气变化的情况了,可惜那时候WebSocket刚刚兴起,而我们又不是WebSocket的发源地,所以没办法实现这种功能(后来我们就用到了WebSocket,虽然目的不是看天气,而是推送通知)。
于是我们就想,如果能构建一个大型的爬虫(因为需要爬取的数据量很大,所以我们用的也是爬虫,而不是浏览器),从网络上爬取我们所需要的所有历史数据和未来的预报数据,不就可以完成这个任务了吗?!于是我们就写了这样的一个爬虫,然后把它们放进了容器里,通过命令行控制它们的行为和停止运行。 但是当我们运行这个爬虫的时候却遇到了一些问题,因为我们发现有些网站(包括中国气象局的网站)都会检测访问者的IP地址,如果这个IP地址没有被授权的话,就会禁止读取页面内容。
一开始我们对这类问题还没有什么好的解决办法,于是我们在公网上找了一台已经报废的服务器作为跳板,然后再连上我们的容器并配置好代理,这样我们的爬虫就能以那台已经报废的服务器的IP地址访问互联网了,而那台已报废的服务器也不会有人再登录,真是完美的解决方案。 后来我们又发现了这样的问题,就是说有的网站虽然有IP限制,但是如果把浏览器的时间戳和Cookie等信息保存下来,然后在请求的时候添加进来就可以了(虽然说这样做有些作弊的嫌疑,但是我们确实是用户呀,我们的目的是获取信息,而不是破坏网站)。