> 本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
一.引言
在数据科学和信息搜集的领域里,天气信息无疑是一个极其重要且频繁使用的数据类型。无论是进行气象研究、规划旅行还是辅助农业决策,天气数据都扮演着关键角色。幸运的是,Python作为一种强大的编程语言,提供了多种库和工具,使得获取天气数据变得既高效又便捷。本文旨在指导读者如何利用Python来抓取天气信息,包括介绍必要的库、发送数据请求以及解析数据等核心步骤。
二.问题描述
本博主试过抓到隐藏的下半月份的数据包,然后经过参数解密等等,最终发请求,然而,遗憾的是,服务器似乎对这些请求置若罔闻,并未返回任何有用数据。,这个问题博主暂时还没找到实际的解决方法(有大佬解决的可以评论区留言教一下),所以这篇文章则采用selenium自动化的方法
三、目标url分析
想要获取某地的历史天气数据,比如想要获取广州市2024年11月份的天气数据。页面地址https://lishi.tianqi.com/guangzhou/202411.html,页面部分区域截图如下,
从页面布局来看,我们的目标天气数据被精心地编排在一个表格之中,其中包含了日期、当日最高温度、最低温度、天气状况以及风向等关键信息。
可以通过拼接的方式得到目标URL:
#目标url,采用列表推导式
#city是城市的拼音 t是时间
url_ = f'https://lishi.tianqi.com/{
city}/{
t}.html'
四、数据解析和保存
-
第一步
基于上述的内容,可以知道下半月份的天气数据需要点击 –查看更多– 才能获取,selenium的自动化的话,则首先需要点击更多
-
第二步
接上,打开浏览器开发者工具,检查页面元素,点击 –查看更多– ,然后编写Xpath语法定位元素(不懂的可以看之前的文章—爬虫基础),显示有30条数据,截图如下
-
第三步
思路:selenium自动化首先进入到页面,然后点击–查看更多–,接着页面的下拉,采用二次提取的方法,提取所有的li标签,通过循环的方式再提取每个li标签里面的日期、最高气温、最低气温、天气和风向这些字段
- 代码展示
代码展示了某一月份的数据操作,需要所有月份的数据可以通过之前列表推导式构建的目标url列表循环即可,代码和实际效果如下
import csv
import random
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
'''页面下拉操作'''
def drop_page(bro):
"""执行页面滚动的操作""" # javascript
# 使用selenium 去执行 JS代码
for x in range(1, 10, 3):