爬取天气数据,利用Pyecharts作轮播图

  金牌会员 | 2024-7-11 13:44:42 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 507|帖子 507|积分 1521

 
爬取网站链接:https://lishi.tianqi.com/xiamen/202312.html

爬取了厦门市2023年一整年的天气数据,包罗最高温,最低温,天气,风力风向等 
爬虫代码:
  1. import requests
  2. import pandas as pd
  3. import csv
  4. from pyecharts.charts import Bar,Timeline
  5. import pyecharts.options as opts
  6. import parsel
  7. f = open('天气数据.csv',mode='w',encoding='utf-8',newline='')
  8. csv_writer = csv.DictWriter(f,fieldnames=['日期','星期','最高温','最低温','天气','风向','风力'])
  9. csv_writer.writeheader()
  10. cookies = {
  11.     'cityPy': 'xiamen',
  12.     'cityPy_expire': '1721098187',
  13.     'UserId': '17204933865319972',
  14.     'Hm_lvt_ab6a683aa97a52202eab5b3a9042a8d2': '1720493387',
  15.     'HMACCOUNT': '4A9167DA75AB7059',
  16.     'Hm_lpvt_ab6a683aa97a52202eab5b3a9042a8d2': '1720493402',
  17.     'Hm_lvt_7c50c7060f1f743bccf8c150a646e90a': '1720493523',
  18.     'Hm_lvt_30606b57e40fddacb2c26d2b789efbcb': '1720493529',
  19.     'Hm_lpvt_30606b57e40fddacb2c26d2b789efbcb': '1720493529',
  20.     'Hm_lpvt_7c50c7060f1f743bccf8c150a646e90a': '1720493646',
  21. }
  22. headers = {
  23.     'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
  24.     'accept-language': 'zh-CN,zh;q=0.9',
  25.     'cache-control': 'no-cache',
  26.     # 'cookie': 'cityPy=xiamen; cityPy_expire=1721098187; UserId=17204933865319972; Hm_lvt_ab6a683aa97a52202eab5b3a9042a8d2=1720493387; HMACCOUNT=4A9167DA75AB7059; Hm_lpvt_ab6a683aa97a52202eab5b3a9042a8d2=1720493402; Hm_lvt_7c50c7060f1f743bccf8c150a646e90a=1720493523; Hm_lvt_30606b57e40fddacb2c26d2b789efbcb=1720493529; Hm_lpvt_30606b57e40fddacb2c26d2b789efbcb=1720493529; Hm_lpvt_7c50c7060f1f743bccf8c150a646e90a=1720493646',
  27.     'pragma': 'no-cache',
  28.     'priority': 'u=0, i',
  29.     'referer': 'https://lishi.tianqi.com/xiamen/202302.html',
  30.     'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"',
  31.     'sec-ch-ua-mobile': '?0',
  32.     'sec-ch-ua-platform': '"Windows"',
  33.     'sec-fetch-dest': 'document',
  34.     'sec-fetch-mode': 'navigate',
  35.     'sec-fetch-site': 'same-origin',
  36.     'sec-fetch-user': '?1',
  37.     'upgrade-insecure-requests': '1',
  38.     'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36',
  39. }
  40. for i in range(1,13):
  41.     if i < 10:
  42.         i = '0'+str(i)
  43.     url = f'https://lishi.tianqi.com/xiamen/2023{i}.html'
  44.     response = requests.get(url=url, cookies=cookies, headers=headers)
  45.     response.encoding=response.apparent_encoding
  46.     html = response.text
  47.     selector = parsel.Selector(html)
  48.     li_list = selector.css('div.tian_three ul.thrui li')
  49.     for li in li_list:
  50.         date_time = li.css('div.th200::text').get().split(' ')[0]
  51.         xingqi_time = li.css('div.th200::text').get().split(' ')[1]
  52.         all_list = li.css('div.th140::text').getall()
  53.         max_temp = all_list[0]
  54.         min_temp = all_list[1]
  55.         weather = all_list[2]
  56.         wind_orient = all_list[3].split(' ')[0]
  57.         wind_rank = all_list[3].split(' ')[1]
  58.         dit = {
  59.             '日期': date_time,
  60.             '星期': xingqi_time,
  61.             '最高温': max_temp,
  62.             '最低温': min_temp,
  63.             '天气': weather,
  64.             '风向': wind_orient,
  65.             '风力': wind_rank,
  66.         }
  67.         csv_writer.writerow(dit)
  68.         print(date_time,xingqi_time,max_temp,min_temp,weather,wind_orient,wind_rank)
复制代码
保存到csv文件:
 
接下来读取文件,对文件格式做调整,以进行绘图操作。 
  1. df = pd.read_csv('天气数据.csv')
  2. print(df.info())
  3. df['日期'] = pd.to_datetime(df['日期'])
  4. df['month_'] = df['日期'].dt.to_period('M')
  5. new_data = df.groupby(['month_','天气']).size().reset_index()
  6. new_data.columns = ['month','weather','count'] #改变列名
  7. print(df.head)
  8. print(new_data)
  9. print(new_data[new_data['month']=='2023-01'][['weather','count']].sort_values(by='count',ascending=False).values.tolist())  # 条件筛选,获取一月份的天气和数量值,获取的是数据框格式
  10. #.sort_values(by='count',ascending=False).values.tolist() 这段代码是按升序排序,获取值并转变为双列表格式
  11. # [['多云', 14], ['小雨', 5], ['晴', 5], ['雾', 4], ['阴', 2], ['中雨', 1]]
复制代码
new_data数据格式如下: 

 
现在进行绘图操作:

  1. # 实例化一个时间序列的对象
  2. timeline = Timeline()
  3. timeline.add_schema(play_interval=1000)  #单位是毫秒
  4. for month in new_data['month'].unique():
  5.     data = (
  6.         new_data[new_data['month'] == month][['weather', 'count']].sort_values(by='count',
  7.                                                                                    ascending=False).values.tolist()
  8.     )
  9.     print(data)
  10.     bar = (
  11.         Bar()
  12.         .add_xaxis([x[0] for x in data])
  13.         .add_yaxis('',[x[1] for x in data])
  14.         .reversal_axis()  #坐标轴倒转
  15.         .set_global_opts(
  16.             title_opts=opts.TitleOpts(title='厦门市2023年每月天气变化')
  17.         )
  18.         .set_series_opts(
  19.             label_opts=opts.LabelOpts(position='right')
  20.         )
  21.     )
  22.     timeline.add(bar,f'{month}')
  23. timeline.render('天气轮播图.html')
复制代码
 
点击轮播图下方的按钮就可以进行播放了。 
 


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表