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)