网站原始数据
https://www.tianqishi.com/hangzhou/20240214.html
源码
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.")
结果
上图中的风力数据显示为日期为excel显示问题,原始csv文件为正常数据:
- 本文链接: https://www.cnblogs.com/gshang/p/18016522
- 版权声明: 本博客所有文章除特别声明外,均采用 CC-BY-NC-SA 4.0 许可协议。转载请注明出处!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步