读《鲜活的数据》第二章有个从wunderground.com获取历史天气数据的例子。那是个国外的网站,或许国内的天气网站有更多关于国内城市的天气信息,用搜狗搜了“历史天气”,果然找到一个提供历史数据的网站lishi.tianqi.com,观察了一下它的页面结构,写了一个从这个网站抓取特定城市一年中每天天气的python程序。
历史天气的页面是以月为单位展示数据的,每个城市每个月对应一个页面,在url中体现出来,比如北京2012年3月的天气数据在http://lishi.tianqi.com/beijing/201203.html这个页面中。每天的数据则集中在当月页面中一个class名为"tqtongji2"的div中,这个div有一组ul标签,每个对应一天的数据,但第一行ul是表头,抓取的时候要跳过这个第一行,第一行ul标签有个特点,就是它有个class属性,而其他ul是没有属性的,因而程序可以利用这个特点辨别并跳过这一行。
下面就是python的抓取程序。python是2.7版,使用了 3.1版的BeautifulSoup作为html解析组件。
from __future__ import print_function
import urllib2
from BeautifulSoup import BeautifulSoup
strYear = '2013'
strFile = 'beijingWeather' + strYear + '.csv'
f = open(strFile, 'w')
for month in range(1, 13):
if(month