想试着收集一些气象数据,记得之前气象数据共享平台可以下,结果发现需要实名认证还要提交证件照之类的,想了想,脸黑,估计认证不过,还是算了。于是又网上找了找,发现在美国noaa网站可以下载,包含中国大概700多个站点的数据,时间从50年代一直到最近,但是细看了几个站点的数据后,发现有些站点数据只到2000年初或者更早。继续搜索后想到可以用爬虫,从天气网等网站爬取一些数据,考虑到权威性,选择了中国天气网。
目标网页
目标网页主要是各个城市的天气页面,主要是当前天气,以及过去24小时天气,每个城市的网址为:
www.weather.com.cn/weather1d/+{城市代码}.shtml
因此,首先需要找到各个城市的代码,从网上搜了一些后,发现这些可能时间较早,与现在网站上数据不能一一对应,所以考虑从网页中重新爬取到城市代码,顺便可以练习一下相关爬虫技术。
网上搜到的爬虫案例大多基于python编写,但是个人最近刚看到一个用java爬取京东商品信息及图片的案例,因此想先用java试着爬取,个人感觉用python会显得更简洁,python代码可以很快的看到核心代码,而java,尤其是比较成熟的java代码,即使核心代码很短,却经常被包含在各种异常处理,各种线程,各种配置文件,各种分门别类里。
话不多说,说城市代码的获取,在研究每个城市天气页面的源码时,发现在一个select的div下,有对应城市的各个区县的代码,比如在上海闵行的页面里,可以看到上海市的各个区县(下图)的城市代码及名称。
再说城市代码的组成规则,前三位101代表中国,接下来的六位依次是省(自治区、直辖市、特区),地市以及区县,分别各占两位,直辖市区县最后两位都是0,真不明白为什么不直接用行政代码。
具体方法
用到的技术主要是发送请求的httpClient以及解析网页的Jsoup。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<