爬虫着实是数据采集中的神器,借助于爬虫的合理设计与实现我们能够很方便地从网络环境中采集到所需要的数据,之后借助于相应的数据解析组件可以快速地抽取得到所需要的数据项。
今天有一个数据获取需求,之前采集的天气、气象等数据源大都是实时性质的,没有提供出来历史数据。这里需要做的就是对历史数据做一个爬取,我们选用的网站为天气后报网站,网页截图如下:
第一眼看到的时候就给人一种,丑到爆炸的感觉有没有,但是呢,我们是要获取网站中的数据的,又不是做网站效果美化的,自然,页面的UI跟我们今天的任务就没有多大的关系了哈。
闲话就说到这里,接下来进入正题,开始网站历史数据的获取。这个网站里面不仅仅有历史的数据,还有最新的数据,因为网站里面的数据是持续更细的。
我们以“山东省”为例,先看一下页面的样子:
接下来以“郓城”为例,看一下最近一个月以来的天气状况,最近一个月份的天气数据显示是以当日为基准倒退一个月计算得到的,具体如下图所示:
最近一个月数据查询链接为:
http://www.tianqihoubao.com/weather/top/yuncheng.html
从上面的链接中我们可以初步推断出来每个地方最近一个月天气数据查询链接的构建方式为:
http://www.tianqihoubao.com/weather/top/+城市编码+.html
这样一来我们就可以基于程序来实现自动化的构建生成每个地方的URL了。
同样,网站中提供了历史天气数据的链接,同样这里以“郓城”为例进行查看,如下:
历史天气数据自造可以追溯到2011年1月份,每个月份的数据都是按照月份内日期的数据进行排列显示的。历史天气数据查询的链接为:
http://www.tianqihoubao.com/lishi/yuncheng/month/201101.html
同样,我们对上述页面的链接进行查看分析,初步推断出,每个地方历史天气数据查询链接的构造方式为:
http://www.tianqihoubao.com/lishi/+城市编码+/month/+年份+月份+.html其中: 年份:2011-2019 月份:01/02/03/04/05/06/07/08/09/10/11/12
这样,我们就挖掘得到了每个城市历史天气数据页面的URL的构造方式了,一个具体的URL就是一个爬虫具体的入口,想要实现爬虫自动化的采集数据,实现自动的URL构建是必不可少的。
理清楚了思路后,设计实现就很就很简单了,这里也不再多说了,仅以浙江省普陀为例查看一下爬取下来的数据,具体如下:
如果注意观察的话,就会发现,这里保存到本地的数据跟原始页面里面展示的数据还是有区别的,区别在于:多了最后两列,这个是为通过构建字典映射的方式,将网站中每条数据的后面都加入了城市信息和省份信息,目的就是为了后面存储到数据库中提供方便。
如果需要源码的话留言,我后续整理提交git上。