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

[复制链接]
发表于 2026-1-27 16:08:49 | 显示全部楼层 |阅读模式
目次
目标
预备工作
爬取数据的开始时间和竣事时间
爬取数据并剖析
将数据转换为DataFrame并生存为CSV文件



        本文将先容怎样使用Python编写一个简朴的爬虫步调,以爬取珠海市2011年至2023年的气候数据,并将这些数据生存为CSV文件。我们将涉及到以下知识点:

  • 使用requests库发送HTTP哀求
  • 使用lxml库剖析HTML文档
  • 使用datetime和dateutil库处理处罚日期
  • 使用pandas库利用数据并将其生存为CSV文件
目标

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

预期效果展示
 

预备工作

        起首,我们必要安装一些须要的库。在下令行中运行以下下令来安装它们:
  1. pip install requests lxml pandas
复制代码
        接下来,我们导入所需的库:
  1. import pandas as pd
  2. import requests
  3. from lxml import etree
  4. from datetime import datetime
  5. from dateutil.relativedelta import relativedelta
复制代码
爬取数据的开始时间和竣事时间

        我们必要确定要爬取的日期范围。在这个例子中,由于我们爬取的网站https://lishi.tianqi.com/zhuhai/202407.html翻页是有明确的url,而且是按末了时间变动的,因此我们必要创建一个列表,用于存储我们的时间列表,后续使用循环将我们的url中日期数据举行更换,我们将爬取2011年1月1日至2023年12月31日的数据。
  1. # 爬取数据的开始时间
  2. start_date = datetime(2011, 1, 1)
  3. # 爬取数据的结束时间
  4. end_date = datetime(2023, 12, 31)
  5. # 遍历间隔,1个月
  6. step = relativedelta(months=1)
  7. # 创建一个列表存放时间
  8. date_list = []
  9. while start_date <= end_date:
  10.     date_list.append(start_date.strftime('%Y%m'))
  11.     start_date += step
复制代码
这里我们可以print(date_list)一下,检察我们的效果

爬取数据并剖析

        接下来,我们将遍历date_list中的每个日期,发送HTTP哀求到对应的URL,并剖析返回的HTML文档以提取所需的气候数据。
  1. # 创建一个列表存放所有数据
  2. data_list = []
  3. # 爬取的年份:2011-2023,12年的每一天的数据
  4. for date in date_list:
  5.     # 爬取数据的网页
  6.     url = f"https://lishi.tianqi.com/zhuhai/{date}.html"
  7.     # 请求头信息,防爬虫操作
  8.     headers = {
  9.         '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'
  10.     }
  11.     # 1、 发送请求
  12.     response = requests.get(url=url,headers=headers)
  13.     if response.status_code == 200:
  14.         # 2、解析数据
  15.         # 数据不是一个动态页面,页面变更时html也会跟着变更
  16.         # 获取到的数据不是json文件,使用xpath解析
  17.         html = etree.HTML(response.text)
  18.         # 获取到30天的数据信息,存放于lis中
  19.         lis = html.xpath('/html/body/div[7]/div[1]/div[4]/ul/li')
  20.         # 由于直接xpath获取到的元素是一个列表
  21.         # 这里我们需要定义一个功能函数,返回我们想要的数据文本
  22.         def get_frist_text(list):
  23.             return list[0]
  24.         # 使用for循环遍历lis,取到每一个li
  25.         # 因为实在lis中获取的信息,所以用 . 表示当前位置
  26.         for li in lis:
  27.             time = get_frist_text(li.xpath('./div[1]/text()'))
  28.             maxtemp = get_frist_text(li.xpath('./div[2]/text()'))
  29.             mintemp = get_frist_text(li.xpath('./div[3]/text()'))
  30.             weather = get_frist_text(li.xpath('./div[4]/text()'))
  31.             wind = get_frist_text(li.xpath('./div[5]/text()'))
  32.             data_list.append([time,maxtemp,mintemp,weather,wind])
  33.     else:
  34.         print("请求失败")
复制代码
将数据转换为DataFrame并生存为CSV文件

        末了,我们将网络到的数据转换为pandas的DataFrame对象,并将其生存为CSV文件。
  1. # 将数据转换为pands DataFrame
  2. df = pd.DataFrame(data_list,columns=['日期','最高温度','最低温度','天气','风向'])
  3. # 将DataFrame保存为csv文件
  4. df.to_csv('zhuhai_weather_data_csv',index=False,encoding='utf-8-sig')
复制代码
爬取效果部门信息展示

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



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表