【Python爬虫】-爬取所在城市近一年的天气情况
2017-08-17 本文已影响164人
927556dd6e46
目标
爬取所在城市近一年的天气情况存入 csv 文件
数据来源 — 中国天气网:http://www.weather.com.cn/
代码
import requests
import json
import csv
def get_url(year,city_id):
for month in range(1, 13):
month = str(month) if month > 9 else "0" + str(month)
url = 'http://d1.weather.com.cn/calendar_new/' + str(year) + '/'+str(city_id)+'_' + str(year) + month + '.html?_ = 1502951033192'
return url
def get_data_list(url):
headers = {'Referer': 'http://www.weather.com.cn/weather40d/101121201.shtml',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36'}
res = requests.get(url,headers=headers).content.decode(encoding='utf-8')
#print(res)
datas = json.loads(res[11:]) # 取出'var fc40 = '后面的内容并用 json 解析
#print(datas)
for data in datas:
data = [data.get('date'),data.get('wk'),data.get('hmax'),data.get('hmin'),data.get('hgl'),
data.get('fe'),data.get('nlyf')+data.get('nl'),data.get('alins'),data.get('als')]
with open('dongying_weather.csv', 'a') as f:
f_csv = csv.writer(f)
f_csv.writerow(data)
if __name__ == '__main__':
with open('dongying_weather.csv', 'w') as f:
f_csv = csv.writer(f)
f_csv.writerow(['日期', '星期', '最高温度', '最低温度', '降水概率', '节日', '农历', '宜', '不宜'])
year = input('输入年份:')
city_id = 101121201
base_url = get_url(year,city_id)
get_data_list(base_url)
image.png
注意
网站是 js 异步加载,天气的数据为 json 格式。在Headers请求中需携带Referer,否则会拒绝访问。
注意找规律构造 url
http://d1.weather.com.cn/calendar_new/2017/101121201_201708.html?_=1502955697524 http://d1.weather.com.cn/calendar_new/2017/101121201_201707.html?_=1502955699260 http://d1.weather.com.cn/calendar_new/2017/101121201_201706.html?_=1502955700830
........
中间的 101121201 参数表示你所在的城市,最后的 1502955697524 参数表示时戳,去掉貌似不影响访问。
疑问
- 存入数据后有空行出现
- 只爬了两个月的数据就停了