首页 > 编程语言 >Python 爬取历史天气数据

Python 爬取历史天气数据

时间:2024-02-15 19:55:05浏览次数:26  
标签:eachDayData Python timeStampEnd 天气 datetime 爬取 loaction timeStampStart csvFilePa

网站原始数据

https://www.tianqishi.com/hangzhou/20240214.html

image

源码

import requests
from bs4 import BeautifulSoup
import datetime


def getEachDayWeather(loaction, timeStamp):
    """
    获取每一天的天气数据
    """
    # 1. 获取网页地址
    urlHead = "https://www.tianqishi.com"
    urlFoot = ".html"
    weatherHtml = "{}/{}/{}{}".format(urlHead,loaction,timeStamp,urlFoot)

    # 2. 提取网页中的当日天气信息
    response = requests.get(weatherHtml)
    html_content = response.text
    soup = BeautifulSoup(html_content, "lxml")
    yuBaoTable = soup.find("table", class_="yuBaoTable")

    # 3. 天气信息记录
    eachDayData = []
    for row in yuBaoTable.find_all('tr'):  # 遍历每一行
        eachHourData = []
        for cell in row.find_all('td'):  # 遍历每一行中的每个单元格
            eachHourData.append(cell.text)
        eachDayData.append(eachHourData)

    return eachDayData

def writeEachDayWeather(eachDayData,csvFilePath):
    """
    向csv中写入每一天的天气数据     
    """
    with open(csvFilePath, "a") as f:
        for eachHourData in eachDayData:  # 遍历每一行
            for data in eachHourData:  # 遍历每一行中的每个单元格
                f.write("{},".format(data))
            f.write("\n")    
    f.close()

def writeTitle(csvFilePath):
    title = "日期时间,气温,风向,风力,风速,气压,湿度,降水概率\n"
    with open(csvFilePath, "w") as f:
        f.write(title)
    f.close()    

def getCsvFilePath(rootPath, loaction, timeStampStart, timeStampEnd):
    csvFilePath = "{}/{}_{}_to_{}.csv".format(rootPath,loaction,timeStampStart,timeStampEnd)
    return csvFilePath

def getTimeStampList(timeStampStart, timeStampEnd, daysDelta=1):
    timeStampStartNum = datetime.datetime.strptime(timeStampStart, "%Y%m%d")
    timeStampEndNum = datetime.datetime.strptime(timeStampEnd, "%Y%m%d")
    days =(timeStampEndNum - timeStampStartNum).days
    timeStampList = []
    for daysDelta in range(0,days+1):
        timeStampStartAdd = timeStampStartNum + datetime.timedelta(days=daysDelta)
        timeStampList.append(timeStampStartAdd.strftime("%Y%m%d"))
    return timeStampList

if __name__ == "__main__":
    timeStampStart = "20231106"
    timeStampEnd = "20240204"
    loaction = "hangzhou"
    rootPath = "./"

    timeStampList = getTimeStampList(timeStampStart,timeStampEnd)
    csvFilePath = getCsvFilePath(rootPath, loaction, timeStampStart, timeStampEnd)
    writeTitle(csvFilePath)

    print("program starting.")
    for timeStamp in timeStampList:
        print("getting weather data for {}".format(timeStamp))
        eachDayData = getEachDayWeather(loaction,timeStamp)
        writeEachDayWeather(eachDayData,csvFilePath)
    print("program finished.")

结果

image

标签:eachDayData,Python,timeStampEnd,天气,datetime,爬取,loaction,timeStampStart,csvFilePa
From: https://www.cnblogs.com/gshang/p/18016522

相关文章

  • Python--操作列表
    Python--操作列表遍历整个列表对于每个元素的执行操作,使用单数和复数的名称,可用帮助判断代码片段处理的是单个列表元素还是整个列表.magicians=['alice','bob','charlie']formagicianinmagicians:print(magician)#alice#bob#charlie在for循环中可以执......
  • Python笔记09——Set(集合)
    九、集合9.1基础集合(set)是一个无序的不重复元素序列,可进行交、集、差等常见的集合操作。与序列的区别:无序,每次输出顺序随机;元素不重复;创建格式:parame={value01,value02,...}或者set(value)(创建空集合只能用set())创建集合示例set1={1,2,3,4}#直接使用......
  • 机器视觉-使用YoloV8的Python API
    参考文档:https://docs.ultralytics.com/modes/predict/#working-with-resultshttps://zhuanlan.zhihu.com/p/655162922https://thinkinfi.com/motorcycle-helmet-detection-using-deep-learning/示例说明关于yoloruntimesettings.yaml对训练过程的干扰yolosettings.y......
  • Python 机器学习 线性回归 正则化线性模型
    ​ Python机器学习中,正则化是一种减少模型过拟合的技术,通过在损失函数中添加一个正则化项来实现。对于线性回归模型,常见的正则化方法有Lasso回归(L1正则化)、岭回归(L2正则化)和弹性网络回归(同时使用L1和L2正则化)。这些方法可以调整模型的复杂度,提高模型的泛化能力。1、欠拟合(Und......
  • 【Python】强化学习Q-Learning走迷宫
    Q-Learning是一种基于值函数的强化学习算法,这里用该算法解决走迷宫问题。算法步骤如下:1.初始化Q表:每个表格对应状态动作的Q值。这里就是一个H*W*4的表,4代表上下左右四个动作。2.选择动作:根据Q表格选择最优动作或者以一定概率随机选择动作。3.执行动作,得到返回奖励(这......
  • Python:处理大数据量文件心得
    --javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown完成大文件按规则拆解。使用python实现将5个多g,总共五千万行数据的csv文件进行按照某个特殊时属性进行拆解。问题难点:文件过大,服务器内存资源不足,需要分块读入内存并处理。之前想着......
  • python基础学习6-第三方模块
    自定义模块优先级大于系统模块模块分为系统模块,自定义模块,第三方模块导入方式import模块名称[as别名]from模块名称import变量/函数/类*包的导入import包名.模块名as别名form包名import模块名as别名form包名.模块名import函数/变量/类*主程序运行i......
  • Python 中 print 函数的用法
    在Python中,可以使用print函数来打印一个变量或者一个字符串:print("MynameisAlice")print(i)如果需要字符串格式化来打印一句话中包含变量的内容,有几种常用的方法:使用格式化字符串(f-string):在字符串前面加上字母"f",然后在字符串中使用大括号{}包裹变量名。示例代码如下:......
  • Ubuntu 中通过源码安装 Python3.x 环境
    最近在个人前后端分离项目时候,后端接口程序fastapi,在部署的时候,需要Pyhton3.8以上的环境,但ubuntu默认的是2.7于是想通过源码安装的方式进行环境搭建.下载官网下载二进制源码安装包:https://www.python.org/downloads/source/wegthttps://www.python.org/ftp/......
  • Python--列表
    Python--列表列表是什么列表由一系列按特定顺序排列的元素组成。你可以创建包含字母表中所有字母、数字0~9或所有家庭成员姓名的列表;在python中使用([])来表示列表,并且使用逗号来分割其中的元素.bicycles=['trek','cannondale','redline','specialized']print(bicycles)#......