美文网首页Python三期爬虫作业
【Python爬虫】-爬取所在城市近一年的天气情况

【Python爬虫】-爬取所在城市近一年的天气情况

作者: 927556dd6e46 | 来源:发表于2017-08-17 16:04 被阅读164次

    目标

    爬取所在城市近一年的天气情况存入 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 参数表示时戳,去掉貌似不影响访问。

    疑问

    • 存入数据后有空行出现
    • 只爬了两个月的数据就停了

    相关文章

      网友评论

      • chengcxy:应该是对方服务器的事儿

      本文标题:【Python爬虫】-爬取所在城市近一年的天气情况

      本文链接:https://www.haomeiwen.com/subject/srtwrxtx.html