当前位置:   article > 正文

【Python】python天气数据抓取与数据分析(源码+论文)【独一无二】_python天气数据的爬取与分析

python天气数据的爬取与分析

一、项目概述
本项目包括四个核心部分:数据爬取、数据存储、数据分析和数据可视化。首先,利用Python编写的网络爬虫从专业的历史天气网站上爬取大连市从2011年至2023年的天气数据,包括日期、最高气温、最低气温和天气状况等信息。爬取过程中应用了requests库来模拟浏览器请求和lxml库来解析HTML文档,确保了数据的准确性和完整性。接着,将爬取到的数据存储在两个CSV文件中,并利用pymysql库将数据导入MySQL数据库,便于后续的数据处理和分析。在数据分析阶段,使用pandas库对CSV中的数据进行读取和处理,计算出如每年的平均气温、最高气温的日期等关键统计信息。最后,利用pyecharts库将分析结果以图表的形式进行可视化展示,生成了五种图表:各类天气所占比例的饼图、每年最高气温的日期折线图、每年平均气温的柱状图、最高气温与最低气温的散点图和最高气温分布的箱线图。

二、项目环境需求
开发环境:Python3.7
运行系统:Windows
软件:Pycharm
三、数据库设计
1)数据库设计概述
本项目的数据库设计关键在于有效地组织和存储从网上爬取的大连市历史天气数据。为了实现这一目标,设计了两个主要的数据表:weather_summary和daily_weather,以及相应的字段来存储和索引数据。这些设计考虑到了数据的完整性、查询效率和易于理解性。

weather_summary 表:
此表用于存储每个月的天气摘要信息,包括城市名、年份、月份以及对应的网页URL。
字段设计:

city (VARCHAR(255)):城市名称,存储城市名,如“大连”。
year (INT):年份,存储数据所属的年份。
month (INT):月份,存储数据所属的月份。
url (VARCHAR(255)):URL地址,存储爬取该月数据的网页链接。
这个表有助于快速定位某个特定时间段的天气数据来源和基本信息。

daily_weather 表:
此表更加详细,用于存储每天的天气数据,包括城市、日期、最高气温、最低气温和天气状况。
字段设计:

city (VARCHAR(255)):城市名称。
date_time (DATE):日期,存储每条记录对应的具体日期。
high (INT):最高气温,存储当天的最高气温值。
low (INT):最低气温,存储当天的最低气温值。
weather (VARCHAR(255)):天气,存储当天的天气情况描述。
该表的设计允许进行详细的日常天气数据分析,如温度变化、极端天气事件等。
关注公众号,回复 “天气数据抓取” 获取源码

2)逻辑结构设计(E-R图)

3)物理结构设计数据表

四、数据获取实现
4.1 网络请求
使用requests库发起HTTP GET请求到目标网站。这里的目标网站是以https://lishi.xxx.com/xxx/YYYYMM.html格式的URL,其中YYYY和MM分别代表年份和月份。
为了避免被网站服务器识别为爬虫,代码中设置了请求头headers,其中包含一个User-Agent,模仿常见浏览器的身份。

4.2 数据解析
使用lxml库对响应的HTML内容进行解析。lxml是一个强大的库,可以处理HTML和XML文档,支持XPath查询语言,用于提取HTML文档中的数据。
代码中利用etree.HTML(resp.text)将获取的HTML文本转换成了lxml的HTML对象,方便后续使用XPath进行数据提取。

4.3 提取具体数据
通过XPath定位HTML文档中存储天气数据的部分,具体是寻找类名为thrui的ul元素下的所有li元素。对于每个li元素,代码进一步提取了日期(date_time)、最高气温(high)、最低气温(low)和天气状况(weather)。
数据清洗:提取的气温数据中包含了摄氏度符号(℃),代码中通过字符串操作去除这个符号,只保留温度的数值部分。
主要代码如下:

  1. weather_info = [] # 新建一个列表,将爬取的每月数据放进去
  2. # 请求头信息:浏览器版本型号,接收数据的编码格式
  3. headers = {
  4. # 必填,不填拿不到数据
  5. 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'
  6. }
  7. # 请求 接收到了响应数据
  8. resp = requests.get(url, headers=headers)
  9. # 数据预处理
  10. resp_html = etree.HTML(resp.text)
  11. # xpath提取所有数据
  12. resp_list = resp_html.xpath("//ul[@class='thrui']/li")
  13. # for循环迭代遍历

五、数据存储
5.1. CSV文件存储
在项目中,CSV文件存储是数据管理的重要环节,利用Python的标准库csv实现。这一过程首先通过open()函数打开或创建一个CSV文件,如dalian_weather.csv,以便写入数据。这种文件格式的普遍兼容性使其成为数据共享和轻量级存储的理想选择。在写入数据之前,通过csv.writer()函数创建一个写入器对象,它是后续所有CSV操作的核心。

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