【python】—— Python爬虫实战:爬取珠海市2011-2023年天气数据并保存为CSV文件

目录

目标

准备工作

爬取数据的开始时间和结束时间

爬取数据并解析

将数据转换为DataFrame并保存为CSV文件


 

        本文将介绍如何使用Python编写一个简单的爬虫程序,以爬取珠海市2011年至2023年的天气数据,并将这些数据保存为CSV文件。我们将涉及到以下知识点:

  1. 使用requests库发送HTTP请求
  2. 使用lxml库解析HTML文档
  3. 使用datetimedateutil库处理日期
  4. 使用pandas库操作数据并将其保存为CSV文件

目标

        爬取天气网中珠海地区的历史天气数据,将日期、最高气温、最低气温、天气、风向各个数据爬取下来,并存储为csv文件

预期结果展示

 

准备工作

        首先,我们需要安装一些必要的库。在命令行中运行以下命令来安装它们:

pip install requests lxml pandas

        接下来,我们导入所需的库:

import pandas as pd
import requests
from lxml import etree
from datetime import datetime
from dateutil.relativedelta import relativedelta

爬取数据的开始时间和结束时间

        我们需要确定要爬取的日期范围。在这个例子中,由于我们爬取的网站https://lishi.tianqi.com/zhuhai/202407.html翻页是有明确的url,并且是按最后时间变更的,因此我们需要创建一个列表,用于存储我们的时间列表,后续使用循环将我们的url中日期数据进行替换,我们将爬取2011年1月1日至2023年12月31日的数据。

# 爬取数据的开始时间
start_date = datetime(2011, 1, 1)
# 爬取数据的结束时间
end_date = datetime(2023, 12, 31)
# 遍历间隔,1个月
step = relativedelta(months=1)
# 创建一个列表存放时间
date_list = []
while start_date <= end_date:
    date_list.append(start_date.strftime('%Y%m'))
    start_date += step

这里我们可以print(date_list)一下,查看我们的结果

爬取数据并解析

        接下来,我们将遍历date_list中的每个日期,发送HTTP请求到对应的URL,并解析返回的HTML文档以提取所需的天气数据。

# 创建一个列表存放所有数据
data_list = []

# 爬取的年份:2011-2023,12年的每一天的数据
for date in date_list:
    # 爬取数据的网页
    url = f"https://lishi.tianqi.com/zhuhai/{date}.html"
    # 请求头信息,防爬虫操作
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0'
    }
    # 1、 发送请求
    response = requests.get(url=url,headers=headers)
    if response.status_code == 200:

        # 2、解析数据
        # 数据不是一个动态页面,页面变更时html也会跟着变更
        # 获取到的数据不是json文件,使用xpath解析
        html = etree.HTML(response.text)
        # 获取到30天的数据信息,存放于lis中
        lis = html.xpath('/html/body/div[7]/div[1]/div[4]/ul/li')

        # 由于直接xpath获取到的元素是一个列表
        # 这里我们需要定义一个功能函数,返回我们想要的数据文本
        def get_frist_text(list):
            return list[0]

        # 使用for循环遍历lis,取到每一个li
        # 因为实在lis中获取的信息,所以用 . 表示当前位置
        for li in lis:
            time = get_frist_text(li.xpath('./div[1]/text()'))
            maxtemp = get_frist_text(li.xpath('./div[2]/text()'))
            mintemp = get_frist_text(li.xpath('./div[3]/text()'))
            weather = get_frist_text(li.xpath('./div[4]/text()'))
            wind = get_frist_text(li.xpath('./div[5]/text()'))
            data_list.append([time,maxtemp,mintemp,weather,wind])
    else:
        print("请求失败")

将数据转换为DataFrame并保存为CSV文件

        最后,我们将收集到的数据转换为pandasDataFrame对象,并将其保存为CSV文件。

# 将数据转换为pands DataFrame
df = pd.DataFrame(data_list,columns=['日期','最高温度','最低温度','天气','风向'])

# 将DataFrame保存为csv文件
df.to_csv('zhuhai_weather_data_csv',index=False,encoding='utf-8-sig')

爬取结果部分信息展示

        至此,我们已经完成了整个爬虫程序。通过运行这段代码,你将得到一个名为zhuhai_weather_data_csv的CSV文件,其中包含了珠海市2011年至2023年的天气数据。

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值