当前位置:   article > 正文

计算机毕业设计:基于python天气数据爬虫可视化系统+气象数据+Django框架(源码)✅

计算机毕业设计:基于python天气数据爬虫可视化系统+气象数据+Django框架(源码)✅

博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业毕业设计项目实战6年之久了✌

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏)

毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总

1、项目介绍

技术栈:
Python语言、Flask框架、MySQL数据库、Bootstrap框架、css+js+HTML
天气预测: weather_yuce.py
机器学习——线性回归(Linear Regression) 预测算法

2、项目界面

(1)系统首页
在这里插入图片描述

(2)空气质量指数曲线和全国历史天气数据查询
在这里插入图片描述

(3)全国风力等级饼状图
在这里插入图片描述

(4)全国历史温度情况柱状图
在这里插入图片描述

(5)空气质量指数和极端温度曲线图
在这里插入图片描述

(6)历史天气数据实时爬取
在这里插入图片描述

(7)天气预测-----机器学习预测算法

在这里插入图片描述
(8)个人信息
在这里插入图片描述

(9)注册登录界面
在这里插入图片描述

(10)数据爬取界面
在这里插入图片描述

3、项目说明

基于Django的天气数据爬虫可视化分析系统是一个用于收集、分析和展示天气数据的Web应用程序。该系统基于Django框架,利用爬虫技术从可靠的天气数据源获取数据,并通过可视化分析工具展示数据结果。

该系统具有以下主要功能:

  1. 数据收集:系统使用爬虫技术从可靠的天气数据源抓取实时的天气数据。通过配置不同的数据源,可以获取不同地区的天气数据。

  2. 数据存储:获取的天气数据经过处理后,存储到数据库中,以便后续的分析和展示。

  3. 数据分析:系统提供多种数据分析功能,包括统计不同地区的温度、湿度、降水量等天气指标的变化趋势,以及不同城市之间的对比分析。

  4. 数据可视化:通过使用图表、地图等可视化工具,将天气数据以直观的方式展示出来。用户可以通过选择不同的时间范围、地区等参数,定制自己感兴趣的数据展示方式。

  5. 用户管理:系统支持多用户同时使用,每个用户可以创建自己的数据分析和展示项目,并设定对应的访问权限。

通过该系统,用户可以方便地获取和分析天气数据,从而更好地了解天气变化情况,为决策提供参考依据。同时,由于避免了敏感内容的出现,该系统在中国可以安全使用。

4、核心代码

import requests
from bs4 import BeautifulSoup 
import re
import pymysql
from datetime import datetime
import time,random


def getHTMLtext(url):   
  """请求获得网页内容"""
  try: 
   headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36"}       
   r = requests.get(url, headers=headers,timeout = 30)    
   r.raise_for_status()        
   r.encoding = r.apparent_encoding     
   print("成功访问",url)  
   time.sleep(random.randint(1,4))
   #保存到txt
  #  with open("output.txt", "w", encoding="utf-8") as f:
  #       f.write(r.text)      
   return r.text    
  except:        
   print("访问错误")       
   return "1111"
  



#处理数据
def get_content(html): 
    final_list =[]
    final1 = []          # 初始化一个列表保存数据  
    bs = BeautifulSoup(html, "html.parser")  # 创建BeautifulSoup对象  
    body = bs.body  
    tian_two = body.find_all('ul', {'class': 'tian_two'})
    #print(tian_two)
    
    #提取数据并插入到数据库中
    high = tian_two[0].find_all('div', class_='tian_twoa')[0].text
    low = tian_two[0].find_all('div', class_='tian_twoa')[1].text
    extreme_high = tian_two[0].find_all('div', class_='tian_twoa')[2].text
    extreme_low = tian_two[0].find_all('div', class_='tian_twoa')[3].text
    average_air_index = tian_two[0].find_all('div', class_='tian_twoa')[4].text
    best_air = tian_two[0].find_all('div', class_='tian_twoa')[5].text
    worst_air = tian_two[0].find_all('div', class_='tian_twoa')[6].text
    final1.append(float(re.findall(r'[-+]?\d+\.?\d*', high)[0]))  #平均高温
    final1.append(float(re.findall(r'[-+]?\d+\.?\d*', low)[0]))  #平均低温
    final1.append(float(re.findall(r'[-+]?\d+\.?\d*', extreme_high)[0]))   #极端高温
    try:
      final1.append(float(re.findall(r'[-+]?\d+\.?\d*', extreme_low)[0]))    #极端低温
    except:
      final1.append(0)    #极端低温
    final1.append(average_air_index)   #平均空气质量指数
    final1.append(best_air)    #空气最好
    final1.append(worst_air)   #空气最差
    #print(high,low,extreme_high,extreme_low,average_air_index,best_air,worst_air)
    final_list.append(final1)
    thrui = body.find_all('ul', {'class': 'thrui'})
    for li in thrui[0].find_all('li'):
      final2 = []  
      date = li.find('div', class_='th200').text.strip()
      max_temperature = li.find_all('div', class_='th140')[0].text.strip()
      min_temperature = li.find_all('div', class_='th140')[1].text.strip()
      weather = li.find_all('div', class_='th140')[2].text.strip()
      wind_direction = li.find_all('div', class_='th140')[3].text.strip()
      wind_level =  int(re.findall(r'\d+\.?\d*', wind_direction)[0])
      #print(f'日期:{date.split(" ")[0]},最高气温:{max_temperature},最低气温:{min_temperature},天气:{weather},风向:{wind_direction},风力等级:{wind_level}')
      final2.append(date.split(" ")[0])
      try:
        final2.append(float(re.findall(r'[-+]?\d+\.?\d*', max_temperature)[0]))
      except:
        final2.append(0)
      try:
        final2.append(float(re.findall(r'[-+]?\d+\.?\d*', min_temperature)[0]))
      except:
        final2.append(0)
      try:
        final2.append(weather)
      except:
        final2.append('无')
      final2.append(wind_direction.split(" ")[0])
      final2.append(wind_level)
      final_list.append(final2)


    return  final_list


#数据保存
def saveDate(data_list,city,month):
  #获取当前时间
  current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  # 连接到MySQL数据库
  conn = pymysql.connect(host='127.0.0.1', user='root', password='123456', db='flask_weather', charset='utf8')
  cursor = conn.cursor()
  for index, data in enumerate(data_list):
    if  index == 0:
      cursor.execute('INSERT INTO t_monthcityweather (city_name, month_time, high_temperature, low_temperature, extreme_high_temperature, \
                     extreme_low_temperature, average_air_index,best_air,worst_air,add_date,pub_date) \
      VALUES (%s,%s,%s, %s, %s, %s, %s, %s, %s, %s, %s)', (city,month,data[0], data[1], data[2], data[3], data[4], data[5], data[6],current_time,current_time))
    else :
       cursor.execute('INSERT INTO t_cityweather (city_name, date_time, max_temperature, main_temperature, weather_conditions, \
                     wind_direction, wind_level,add_date,pub_date) \
      VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)', (city,data[0], data[1], data[2], data[3], data[4],data[5],current_time,current_time))
       

  # 提交事务并关闭连接
  conn.commit()
  cursor.close()
  conn.close()
  return '数据保存结束'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/568177
推荐阅读
相关标签