python3 采集 中国天气网 七天预报和当天生活指数

python3 采集 中国天气网 七天预报和当天生活指数

数据格式

{“index”: [{“title”: “紫外线指数”, “level”: “最弱”, “desc”: “辐射弱,涂擦SPF8-12防晒护肤品。”}, {“title”: “减肥指数”, “level”: 1, “desc”: “雨雪相伴湿冷天,坚持室内低强度运动。”}, {“title”: “血糖指数:”, “level”: “不易波动”, “desc”: “天气条件不易引起血糖波动。”}, {“title”: “穿衣指数”, “level”: “寒冷”, “desc”: “建议着厚羽绒服等隆冬服装。”}, {“title”: “洗车指数”, “level”: “不宜”, “desc”: “有雪,雪水和泥水会弄脏爱车。”}, {“title”: “空气指数”, “level”: “良”, “desc”: “气象条件有利于空气污染物扩散。”}], “sevendays”: [{“date”: “16日(今天)”, “wea”: “小雪转多云”, “wea_coded”: “d14”, “wea_coden”: “n01”, “tem_low”: “-3℃”, “tem_high”: “3℃”, “win_speed”: “<3级转3-4级”, “win”: [“西南风”, “北风”]}, {“date”: “17日(明天)”, “wea”: “晴”, “wea_coded”: “d00”, “wea_coden”: “n00”, “tem_low”: “-6℃”, “tem_high”: “7℃”, “win_speed”: “3-4级转<3级”, “win”: [“北风”, “北风”]}, {“date”: “18日(后天)”, “wea”: “晴”, “wea_coded”: “d00”, “wea_coden”: “n00”, “tem_low”: “-6℃”, “tem_high”: “3℃”, “win_speed”: “<3级”, “win”: [“南风”, “北风”]}, {“date”: “19日(周四)”, “wea”: “晴”, “wea_coded”: “d00”, “wea_coden”: “n00”, “tem_low”: “-8℃”, “tem_high”: “6℃”, “win_speed”: “3-4级转<3级”, “win”: [“北风”, “东北风”]}, {“date”: “20日(周五)”, “wea”: “晴”, “wea_coded”: “d00”, “wea_coden”: “n00”, “tem_low”: “-8℃”, “tem_high”: “1℃”, “win_speed”: “<3级”, “win”: [“南风”, “北风”]}, {“date”: “21日(周六)”, “wea”: “晴转多云”, “wea_coded”: “d00”, “wea_coden”: “n01”, “tem_low”: “-6℃”, “tem_high”: “3℃”, “win_speed”: “<3级”, “win”: [“西北风”, “北风”]}, {“date”: “22日(周日)”, “wea”: “多云转阴”, “wea_coded”: “d01”, “wea_coden”: “n02”, “tem_low”: “-7℃”, “tem_high”: “2℃”, “win_speed”: “<3级”, “win”: [“东北风”, “西南风”]}]}

python代码

import sys
import requests
from lxml import html

def get_content(code='101191204'):
    url = 'http://www.weather.com.cn/weather/%s.shtml' % code
    return requests.get(url).content

# 生活指数
def shzs():
    l = []
    for i in sel.xpath('//ul[@class="clearfix"]'):
        # 防晒指数
        span_title='紫外线指数:'
        span_intension = i.xpath('li[1]/span/text()')[0]
        span_product = i.xpath('li[1]/p/text()')[0]
        if len(span_intension) == 1:
            span = span_title + span_intension + '      '+ span_product
        else:
            span = span_title + span_intension + '    '+ span_product
        # 减肥指数
        jianfei_title='减肥指数:'
        jianfei_intension =''
        jianfei_product = i.xpath('li[2]/a/p/text()')[0]
        if len(span_intension) == 1:
            jianfei = jianfei_title + jianfei_intension + '      '+ jianfei_product
        else:
            jianfei = jianfei_title + jianfei_intension + '    '+ jianfei_product
        # 血糖指数:
        xuetang_title='血糖指数:'
        xuetang_intension = i.xpath('li[3]/span/text()')[0]
        xuetang_product = i.xpath('li[3]/p/text()')[0]
        if len(span_intension) == 1:
            xuetang = xuetang_title + xuetang_intension + '      '+ xuetang_product
        else:
            xuetang = xuetang_title + xuetang_intension + '    '+ xuetang_product
        # 穿衣指数 
        dress_intension = i.xpath('li[4]/a/span/text()')[0]
        dress_sug = i.xpath('li[4]/a/p/text()')[0]
        if len(dress_intension) == 2:
            dress = '穿衣指数:' + dress_intension + '      ' + dress_sug
        else:
            dress = '穿衣指数:' + dress_intension + '    ' + dress_sug
        # 洗车指数
        car_title='洗车指数:'
        car_intension = i.xpath('li[5]/span/text()')[0]
        car_product = i.xpath('li[5]/p/text()')[0]
        if len(span_intension) == 1:
            car = car_title + car_intension + '      '+ car_product
        else:
            car = car_title + car_intension + '    '+ car_product
        # 空气指数
        air_condition = i.xpath('li[6]/span/text()')[0]
        air_product = i.xpath('li[6]/p/text()')[0]
        air = '空气指数:' + air_condition+'     '+air_product
        
        t = (span,jianfei,xuetang, dress,car, air)
        l.append(t)
    return l

# 获取温度
def get_tem(top, index):
    tem_low = top.xpath('li[%d]/p[@class="tem"]/i/text()' % index)[0]
    if len(top.xpath('li[%d]/p[@class="tem"]/span' % index)) != 0:
        tem_high = top.xpath('li[%d]/p[@class="tem"]/span/text()' % index)[0] + '℃'
        return tem_low + ' ~' + tem_high
    else:
        return tem_low

# 预测未来几天的天气和生活指数
def predict_days(days):
    for i in range(1, days+1):
        # 日期
        date = top.xpath('li[%d]/h1/text()' % i)[0]
        # 天气
        weather = top.xpath('li[%d]/p[@class="wea"]/text()' % i)[0]
        weathercodestr=top.xpath('li[%d]/big/@class' % i)[0]
        weathercodearr=weathercodestr.split(' ')
        weathercode=weathercodearr[1]
        # 温度
        tem = get_tem(top, i)
        # 风力
        win_speed = top.xpath('li[%d]/p[@class="win"]/i/text()' % i)[0]
        win = top.xpath('li[%d]/p[@class="win"]/em/span/@title' % i)
        print("日期:%s\n天气:%s\n天气代码:%s\n温度:%s\n风力:%s\n风向:%s" % (date, weather, weathercode,tem, win_speed,win))
        
        life_condition = shzs() 
        for index in range(6):
            print(life_condition[i-1][index])
        print('==============================================')

if __name__ == "__main__":

    city = {
        "秦皇岛":'101091101',
        "淄川":'101120302',
        "北京":'101010100'
    }

    if len(sys.argv) == 2:
        city_code = city[sys.argv[1]]
        content = get_content(city_code)
    else:
        content = get_content()

    sel = html.fromstring(content)
    top = sel.xpath('//ul[@class="t clearfix"]')[0] # 忘记写 [0] top 类型为list
    suggestions = sel.xpath('//ul[@class="clearfix"]')[0]

    predict_days(7)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值