利用Python爬取中国气象局天气预报数据

news/2025/3/5 7:29:37/

利用Python爬取中国气象局天气预报数据

在这篇博客中,我们将介绍一段使用Python编写的代码,它能够从中国气象局的网站上爬取天气预报数据,并将这些数据存储到数据库中。这段代码不仅展示了如何利用Python进行网页数据抓取,还涉及到数据处理和数据库操作等多方面的知识。

一、功能概述

这段代码的主要功能是从中国气象局的网站(https://weather.cma.cn/)获取特定地区(如大理市及周边多个县)的天气预报信息,包括每天的天气描述、风向、风力、最高最低气温,以及最近预报时间的详细气象数据(如气温、降水量、风速、风向、气压、湿度、云量等),然后将这些数据存储到数据库中。同时,代码还会记录每次运行的状态(成功或失败)以及相关日志信息。

二、代码结构分析

  1. 导入模块:代码开头导入了多个常用模块,包括datetimetime用于处理时间相关操作,requests用于发送HTTP请求获取网页内容,json用于处理JSON数据格式,re用于正则表达式操作,BeautifulSoup用于解析HTML页面,random用于生成随机数(虽然在当前代码中未使用到)。此外,还导入了自定义模块GqxjDaomxt_yxqk,从命名推测GqxjDao可能用于数据库操作,mxt_yxqk可能用于记录任务运行情况。
python">import datetime
import time
import tracebackimport requests
import json
import re
from bs4 import BeautifulSoup
import randomfrom GqxjDao import GqxjDao
from mxt_yxqk import mxt_yxqk
  1. 定义获取表结构的函数getTableWeatherForecast:这个函数定义了要存储数据的表名和列名。表名是一个包含实际表名和表描述的元组,列名是一个包含多个元组的列表,每个元组包含列名和列描述。通过这种方式,将表结构信息集中管理,方便后续数据库操作。
python">def getTableWeatherForecast():""":return:"""# 表名tablename = ('weather_forecast', '中国气象局_天气预报')# 列名fields = [('xs','县市'), ('xq', '星期'), ('date_day', '日期'), ('tqms', '白天天气描述'), ('fx', '白天风向'),('fl', '白天风力'), ('zgqw', '最高气温'), ('zdqw', '最低气温'), ('night_tqms', '夜间天气描述'),('night_fx', '夜间风向'), ('night_fl', '夜间风力'), ('next_time', '最近预报时间'),('next_qw', '最近预报气温'), ('next_jsl', '最近预报降水量'), ('next_fs', '最近预报风速'),('next_fx', '最近预报风向'), ('next_qy', '最近预报气压'), ('next_sd', '最近预报湿度'),('next_yl', '最近预报云量')]return tablename, fields
  1. 定义请求头函数urlHeaders:该函数根据传入的参数num返回不同的请求头信息。目前代码中只定义了num == 1时的请求头,请求头中包含了浏览器标识、接受的内容类型、语言偏好等信息,模拟了一个真实浏览器访问网页的请求头,有助于避免网站反爬虫机制。
python">def urlHeaders(num):if num == 1:headers1 = {"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","Accept-Encoding": "gzip, deflate, br","Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6","Cache - Control": "max - age = 0","Connection": "keep-alive","Cookie": "Hm_lvt_c758855eca53e5d78186936566552a13=1658996987,1659058143; Hm_lpvt_c758855eca53e5d78186936566552a13=1659058158","Host": "weather.cma.cn","If - Modified - Since": "Fri, 29 Jul 2022 01:05: 43 GMT","If-None-Match": '"62e33267-14922"',"sec-ch-ua": '" Not;A Brand";v="99", "Microsoft Edge";v="103", "Chromium";v="103"',"sec-ch-ua-mobile": "?0","sec-ch-ua-platform": '"Windows"',"Sec-Fetch-Dest": "document","Sec-Fetch-Mode": "navigate","Sec-Fetch-Site": None,"Sec-Fetch-User": "?1","Upgrade-Insecure-Requests": "1","User-Agent"

http://www.ppmy.cn/news/1576764.html

相关文章

微信小程序中配置不同的环境变量,并依据环境变量编写API接口请求文件

在微信小程序中,为了在不同环境(如开发、测试、生产)下使用不同的 API 接口地址,我们可以通过配置环境变量来实现。以下是具体的实现步骤和示例代码: 1. 创建环境配置文件 在项目根目录下创建一个 env.js 文件&#…

Git强制覆盖分支:将任意分支完全恢复为main分支内容

Git强制覆盖分支:将任意分支完全恢复为main分支内容 场景背景完整操作步骤一、前置准备二、操作流程步骤 1:更新本地 main 分支步骤 2:强制重置目标分支步骤 3:强制推送至远程仓库 三、操作示意图 关键风险提示(必读&a…

深入浅出C语言:第一步,理解 Hello World!

深入浅出C语言&#xff1a;第一步&#xff0c;理解 “Hello World!” 一、程序结构解析 “Hello World!” 程序虽然简短&#xff0c;但它包含了C语言程序的基本结构。 下面是这个程序的代码&#xff1a; #include <stdio.h>int main() { printf("Hello World…

comfyui使用ComfyUI-AnimateDiff-Evolved, ComfyUI-Advanced-ControlNet节点报错解决

comfyui使用animate-diff生成动画&#xff0c;各种报错解决 报错1&#xff1a; ‘cond_obj’ object has no attribute ‘hooks’ 报错2&#xff1a; AdvancedControlBase.get_control_inject() takes 5 positional arguments but 6 were given 报错3&#xff1a; ‘ControlN…

二叉树迭代遍历(三种写法)

写法一&#xff08;各个步骤分离&#xff09; 前序遍历 class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> list new ArrayList<>();//迭代算法preorderStack(root, list);return list;} //通过栈的先进后出特性&am…

使用阿里云 API 进行声音身份识别的方案

使用阿里云 API 进行声音身份识别的方案 阿里云提供 智能语音交互&#xff08;智能语音识别 ASR&#xff09; 和 声纹识别&#xff08;说话人识别&#xff09; 服务&#xff0c;你可以利用 阿里云智能语音 API 进行 说话人识别&#xff0c;实现客户身份验证。 方案概述 准备工…

通俗易懂的聚类算法之K均值详解

K 均值聚类算法&#xff08;K-Means Clustering&#xff09; 是一种常用的无监督学习算法&#xff0c;用于将数据集划分为 K 个簇&#xff08;Cluster&#xff09;。它的核心思想是通过迭代优化&#xff0c;将数据点分配到最近的簇中心&#xff0c;并更新簇中心&#xff0c;直到…

07 搜索(BFS和DFS)图的遍历

引用链接&#xff1a;https://blog.csdn.net/weixin_43955293/article/details/126445861深度优先搜索&#xff08;DFS&#xff09;和广度优先搜索&#xff08;BFS&#xff09;_深度优先搜索和广度优先搜索对比-CSDN博客 1、广度优先遍历&#xff08;BFS&#xff09; 1.1概念…