Python三期爬虫作业

【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 参数表示时戳,去掉貌似不影响访问。

疑问

上一篇下一篇

猜你喜欢

热点阅读