【爬虫实战】——Python爬取天气信息_天气数据爬虫数据

如果你正在学习Python,那么你需要的话可以,点击这里👉Python重磅福利:入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享! 

前言介绍

在数据分析和信息获取领域,天气数据是一个常见且重要的数据源。通过Python编程,我们可以高效地爬取天气数据,用于各种应用场景,如气象分析、旅行规划、农业决策等。Python提供了丰富的库和工具,使得这一过程变得相对简单。本文将介绍如何使用Python爬取天气数据,包括所需的库、API接口的选择、数据请求与解析等关键步骤。

一、目标页面url

目标页面url获取

想要获取某地的历史天气数据,比如想要获取烟台的历史天气数据。页面地址https://lishi.tianqi.com/yantai/201101.html,页面部分区域截图如下,

图片

可以看到想要获取的天气数据,在页面上是以一个表格的形式展示的,我们需要获取其中的日期、最高气温、最低气温、天气和风向等数据。

根据页面地址可以分析出其组成规则,即以https://lishi.tianqi.com/+地区名称拼音+年份月份+.html组合成页面地址url。

思路:遍历循环年份和月份,拼装成一系列年份月份天气数据的页面地址url,以供后续访问。

代码实现:​​​​

for year in range(2011,2025):
    for month in range(1,13):
        if month < 10:
            print(f"http://lishi.tianqi.com/yantai/{year}0{month}.html")
        else:
            print(f"http://lishi.tianqi.com/yantai/{year}{month}.html")

以上代码片段执行结果部分截图,如下,

图片

如图所示,我们需要爬取的历史天气数据所在页面的url就已经拼装好了。历史天气数据时间范围从201101~202412。

二、目标页面结构分析与数据获取

▋目标页面结构分析

接上,继续以烟台地区2011年01月份的历史天气数据页面(http://lishi.tianqi.com/yantai/201101.html)为例,分析其页面结构。

打开浏览器开发者工具,检查页面元素,

图片

可以明确天气数据在页面结构中的位置,接下来我们会使用BeautifulSoup模块来提取目标数据。

▋目标页面历史天气数据获取

安装BeautifulSoup模块后,使用requests模块请求url,解析返回页面元素,处理元素数据,直至提取出目标数据。

import requests
from bs4 import BeautifulSoup

url = 'http://lishi.tianqi.com/yantai/201101.html'
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
tianqi_zone = soup.find(class_='tian_three')
tianqi_data = tianqi_zone.find(class_='thrui')
tianqi_data_a_month = tianqi_data.find_all('li')

for tianqi_data_a_day in tianqi_data_a_month:
    print(tianqi_data_a_day.text.split())

代码执行结果如下,

图片

从执行结果中可以看出,成功提取到烟台在2011年1月份的天气数据,包括日期、最高气温、最低气温、天气和风向数据。

 

三、保存至本地

▋使用pandas模块保存数据至本地

使用pandas模块把爬取的天气数据保存至本地excel文件中,代码略作变更,代码实现如下,

import requests
from bs4 import BeautifulSoup
import pandas as pd

url = 'http://lishi.tianqi.com/yantai/201101.html'
headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
tianqi_zone = soup.find(class_='tian_three')
tianqi_data = tianqi_zone.find(class_='thrui')
tianqi_data_a_month = tianqi_data.find_all('li')

a_month = [tianqi_data_a_day.text.split() for tianqi_data_a_day in tianqi_data_a_month]
print(a_month)
a_month_df = pd.DataFrame(a_month,
                        columns=['日期', '最高温度', '最低温度', '天气', '风向', '风力'])
a_month_df.to_excel('a.xlsx', index=False)

其中print(a_month)打印出的结果如下,

图片

二维嵌套列表,转换成df数据类型后保存至本地的a.xlsx文件中。

图片

四、完整代码以及项目信息

▋完整代码

以上小节中只保存了一个月的历史天气数据,想要保存近10年的历史数据,需要依次访问不同年份月份的url,爬取数据,依次保存至本地excel中。

完整代码如下,仅供参考,​​​​​​​

import requests
from bs4 import BeautifulSoup
import pandas as pd


def save_a_month_data(url):
    """
    保存一个月的天气历史数据,即一个页面中的数据
    :param url: 页面url 保存有某年某月的月数据所在的页面
    :return: 返回当月的二维天气数据列表
    """
    # 返回的当月的天气数据列表a_month
    a_month = []

    # 请求头
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"}
    # 请求url,响应r
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    tianqi_zone = soup.find(class_='tian_three')
    try:
        tianqi_data = tianqi_zone.find(class_='thrui')
    except AttributeError:
        print(tianqi_zone)
        return a_month
    tianqi_data_a_month = tianqi_data.find_all('li')

    # 当月天气历史数据的处理
    for tianqi_data_a_day in tianqi_data_a_month:
        len_a_day_data = len(tianqi_data_a_day.text.split())
        if len_a_day_data == 7:
            a_day_data = tianqi_data_a_day.text.split()
            a_day_data.remove(a_day_data[1])
            a_month.append(a_day_data)
        else:
            a_month.append(tianqi_data_a_day.text.split())

    return a_month


# 所有的历史数据保存变量 all_data
all_data = []

# 遍历201101~202412之间的所有历史数据
for year in range(2011, 2025):
    for month in range(1, 13):
        if month < 10:
            url = f"http://lishi.tianqi.com/yantai/{year}0{month}.html"
            # print(url)
            a_month_data = save_a_month_data(url)
            all_data += a_month_data
        else:
            url = f"http://lishi.tianqi.com/yantai/{year}{month}.html"
            # print(url)
            a_month_data = save_a_month_data(url)
            all_data += a_month_data

df = pd.DataFrame(all_data)
# 保存所有的天气历史数据至本地excel文件中
df.to_excel('a.xlsx', index=False)

以上完整代码在2024年8月16日验证可用。

▋项目相关信息

项目使用Python 3.10.6,以及依赖的模块版本如下,​​​​​​​

requests==2.32.2
beautifulsoup4==4.12.3
pandas==2.2.2
总结

通过Python编程,我们可以高效地爬取天气数据,并将其用于各种应用场景。在爬取过程中,我们需要选择合适的天气数据提供商和API接口,安装必要的Python库,发送网络请求并解析数据,处理异常和错误,以及保存和可视化数据。这些步骤构成了Python爬取天气数据的完整流程。

需要注意的是,在爬取天气数据时,我们需要遵守相关法律法规和提供商的使用协议,不得进行恶意爬取或滥用数据。同时,我们也需要关注数据的准确性和时效性,以便为后续的分析和决策提供可靠依据。

如果你正在学习Python,那么你需要的话可以,点击这里👉Python重磅福利:入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享!或扫描下方CSDN官方微信二维码获娶Python入门&进阶全套学习资料、电子书、软件包、项目源码:

<think>好的,用户遇到了Git合并时本地更改会被覆盖的问题,需要解决方案。根据之前的引用资料,解决方法主要有commit、stash和revert三种。首先,我得确认用户的具体情况,比如他们的本地更改是否已经完成,是否需要保留,或者是否可以丢弃。用户可能不太清楚这三种方法的适用场景,需要详细解释每个选项的步骤和优缺点。比如,commit适用于需要保留更改的情况,stash适合临时保存以便后续恢复,而revert则是直接撤销更改,适用于不需要保留的情况。需要结构清晰,分点说明,每个方法都给出操作步骤和适用场景,帮助用户理解哪种情况最适合他们。还要注意使用中文,避免技术术语过于复杂,让用户容易理解。同时,生成相关问题,可能涉及如何恢复stash的内容,或者如何避免频繁冲突等,扩展用户的知识点。另外,要确保LaTeX格式正确,但在这个问题中可能用不上数学公式,所以主要关注代码块和引用标识。检查引用是否正确,比如引用[^1]和[^2]的来源是否相关,用户提供的引用内容是否准确对应解决方案。 最后,确保回答真实可靠,操作步骤准确无误,避免误导用户。可能还需要提醒用户根据具体情况选择方法,比如如果有未完成的实验性代码,stash可能是更好的选择,而如果是确定要保留的修改,则应该commit。</think>要解决Git合并时本地更改被覆盖的问题,可根据不同场景选择以下三种方法: ### 一、提交本地更改(commit) **适用场景**:当本地更改已测试通过且需要保留到版本历史中。 **操作步骤**: 1. 将改动添加到暂存区: ```bash git add . # 添加所有文件 # 或指定文件 git add file1.txt file2.py ``` 2. 提交更改并添加描述: ```bash git commit -m "完成用户登录模块优化" ``` 3. 执行合并操作: ```bash git merge origin/main ``` **优点**:保留完整的开发记录,便于后续追溯[^1]。 ### 二、暂存更改(stash) **适用场景**:需要临时保存未完成的修改(如调试代码),优先处理合并操作。 **操作步骤**: 1. 保存当前工作状态: ```bash git stash # 可选添加备注 git stash save "用户登录模块调试代码" ``` 2. 查看暂存记录列表: ```bash git stash list ``` 3. 合并远程分支: ```bash git merge origin/main ``` 4. 恢复暂存内容: ```bash git stash pop # 恢复并删除最近一次暂存 # 或指定特定暂存 git stash apply stash@{1} ``` **优点**:保持工作目录整洁,特别适合处理紧急合并任务[^2]。 ### 三、撤销本地更改(revert) **适用场景**:本地修改可丢弃(如实验性代码或错误修改)。 **操作步骤**: 1. 撤销所有未提交的修改: ```bash git checkout -- . # 全部文件 # 或指定文件 git checkout -- file1.txt ``` 2. 执行合并操作: ```bash git merge origin/main ``` **风险提示**:此操作不可逆,需确认文件无需保留。 --- ### 对比决策表 | 方法 | 保留记录 | 可恢复性 | 适用阶段 | |---------|----------|----------|------------------| | commit | ✅ | ✅ | 功能开发完成时 | | stash | ❌ | ✅ | 开发中途临时切换 | | revert | ❌ | ❌ | 放弃无效修改 | ### 扩展应用场景 - 当存在多个暂存时,可用`git stash list`查看记录,通过`git stash apply stash@{n}`精准恢复 - 合并后出现冲突时,可使用`git mergetool`可视化工具解决冲突 - 长期分支开发推荐使用`git rebase`保持提交历史线性
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值