当前位置: 首页 > news >正文

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

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

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

一、功能概述

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

二、代码结构分析

  1. 导入模块:代码开头导入了多个常用模块,包括datetimetime用于处理时间相关操作,requests用于发送HTTP请求获取网页内容,json用于处理JSON数据格式,re用于正则表达式操作,BeautifulSoup用于解析HTML页面,random用于生成随机数(虽然在当前代码中未使用到)。此外,还导入了自定义模块GqxjDaomxt_yxqk,从命名推测GqxjDao可能用于数据库操作,mxt_yxqk可能用于记录任务运行情况。
import datetime
import time
import traceback

import requests
import json
import re
from bs4 import BeautifulSoup
import random

from GqxjDao import GqxjDao
from mxt_yxqk import mxt_yxqk
  1. 定义获取表结构的函数getTableWeatherForecast:这个函数定义了要存储数据的表名和列名。表名是一个包含实际表名和表描述的元组,列名是一个包含多个元组的列表,每个元组包含列名和列描述。通过这种方式,将表结构信息集中管理,方便后续数据库操作。
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时的请求头,请求头中包含了浏览器标识、接受的内容类型、语言偏好等信息,模拟了一个真实浏览器访问网页的请求头,有助于避免网站反爬虫机制。
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"

相关文章:

  • ctf网络安全赛题
  • tsconfig.json 配置清单
  • C语言运算符优先级,简单样例理解
  • 从芯片到光网络:解密平面光波导技术(PLC)核心优势
  • 【IEEE/EI/Scopus检索】2025年3-4月传感器与信息技术、通信、软件、信号处理领域国际学术会议征稿开启!
  • 【0001】初识Java
  • 新豪轩荣登国货之光计划领航中国定制门窗发展新征程
  • 【练习】【链表】力扣热题100 19. 删除链表的倒数第 N 个结点
  • 扩散语言模型:从图像生成到文本创造的范式跃迁
  • redis事务详解
  • 【FastGPT】如何新增用户修改密码
  • [经验总结]Exec format error——Shebang解释器声明省略的锅
  • 非平衡数据的处理
  • 计算机网络——子网掩码
  • CF1363C Game On Leaves【题解】
  • 使用Nokov度量运动捕捉系统进行定位
  • Elasticsearch --- 相关基础知识整理
  • 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(5)
  • HTML前端手册
  • AI编程,常见的AI编程工具有哪些?如何用AI编程做一个简单的小软件?
  • 郑州市疫情防控指挥部电话号码/朝阳区seo
  • 网站整合营销建设/网络推广都有哪些平台
  • 电脑网站建设规划/做微商怎么找客源加人
  • 帮推广平台/广州seo成功案例
  • 网站建设石家庄快优/长尾关键词排名推广
  • 公司建设网站公司/成都seo专家