Python爬取城市天气信息,并存储到csv文件中

1.爬取的网址为:天气网 (weather.com.cn)

2.需要建立Weather.txt文件,并在里面加入如下形式的字段:

101120701=济宁
101010100=北京

3.代码运行后,在命令行输入Weather.txt文件中添加过的城市,如:济宁。

4.生成的内容存储到csv文件中,形式如下所示:

5.具体代码如下:

# -*- coding:utf-8 -*-
"""
作者:青鸟飞啊555
日期:2024年12月26日
"""
import requests
import csv
import random
import time
import socket
import http.client
from bs4 import BeautifulSoup
import os# 获取桌面路径
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")# 创建一个保存天气信息的文件夹
save_folder = os.path.join(desktop_path, "Weather")
os.makedirs(save_folder, exist_ok=True)  # 如果文件夹不存在则创建#  获取每个城市对应天气的url
def get_url(city_name):url = 'https://www.weather.com.cn/weather/'with open(save_folder+'\\'+'Weather.txt', 'r', encoding='UTF-8') as fs:lines = fs.readlines()for line in lines:if (city_name in line):code = line.split('=')[0].strip()# print(code)return url + code + '.shtml'raise ValueError('invalid city name')#  对网页获取get请求,得到的是response对象
def get_content(url, data=None):#  模拟浏览器访问header = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding': 'gzip, deflate, sdch','Accept-Language': 'zh-CN,zh;q=0.8','Connection': 'keep-alive','User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.235'}#  超时,取随机数是因为防止被网站认定为网络爬虫timeout = random.choice(range(80, 180))while True:try:#  获取请求数据rep = requests.get(url, headers=header, timeout=timeout)rep.encoding = 'utf-8'breakexcept socket.timeout as e:print('3:', e)time.sleep(random.choice(range(8, 15)))except socket.error as e:print('4:', e)time.sleep(random.choice(range(20, 60)))except http.client.BadStatusLine as e:print('5:', e)time.sleep(random.choice(range(30, 80)))except http.client.BadStatusLine as e:print('6:', e)time.sleep(random.choice(range(5, 15)))return rep.text# 获取html中我们所需要的字段:
def get_data(html_text, city_name):#  final元组存放七天的数据final = []t = []t.append(city_name)final.append(t)bs = BeautifulSoup(html_text, "html.parser")  # 创建BeautifulSoup对象,解析器为:html.parserbody1 = bs.body  # 获取body部分#  print(body1)data = body1.find('div', {'id': '7d'})  # 找到id为7d的divprint(data)ul = data.find('ul')  # 获取ul部分li = ul.find_all('li')  # 获取所有的lifor day in li:  # 对每个li标签中的内容进行遍历# temp代存每日的数据temp = []#  添加日期data = day.find('h1').string  # 找到日期temp.append(data)  # 添加到temp中inf = day.find_all('p')  # 找到li中的所有p标签#  添加天气状况temp.append(inf[0].string)  # 第一个p标签中的内容(天气状况)加到temp中#  添加最高气温if inf[1].find('span') is None:temperature_highest = None  # 天气当中可能没有最高气温(傍晚)else:temperature_highest = inf[1].find('span').string  # 找到最高气温temperature_highest = temperature_highest.replace('℃', '')temp.append(temperature_highest)  # 将最高温添加进去# 添加最低气温temperature_lowest = inf[1].find('i').string  # 找到最低温temperature_lowest = temperature_lowest.replace('℃', '')  # 最低温度后面有个℃,去掉这个符号temp.append(temperature_lowest)  # 将最低温添加上去final.append(temp)  # 将temp 加到final中return final# 将抓取出来的数据写入文件
def write_data(city_name, data, file_name):with open(file_name, 'a', errors='ignore', newline='') as f:f_csv = csv.writer(f)f_csv.writerows(data)print('%s 天气已添加成功' % city_name)if __name__ == '__main__':cities = input('请输入城市名称(一个或多个,以空格隔开): ').split(' ')for city in cities:url = get_url(city)  # 获取城市天气的urlhtml = get_content(url)  # 获取网页htmlresult = get_data(html, city)  # 爬去城市的信息write_data(city, result, save_folder + '\\' + 'weather.csv')  # 将爬取得信息填入表格文件

注:参考python3 爬虫—爬取天气预报多个城市七天信息(三)_抓取七天数据所在的li标签-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/500482.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS Stream 9 安装 JDK

安装前检查 java --version注:此时说明已安装过JDK,否则为未安装。如若已安装过JDK可以跳过安装步骤直接使用,或者先卸载已安装的JDK版本重新安装。 安装JDK 官网下载地址:https://www.oracle.com/java/technologies/downloads…

win11 vs2022 opencv 4.10使用vs Image Watch插件实时可视化内存mat对象

这个本来是非开源工业软件HALCON的一个功能,方便提升图像识别开发效率。原以为opencv没有,需要通过进程间共享内存的方式去实现。 结果在官网帮助文档中发现已经提供了。 opencv 4.10帮助文档https://docs.opencv.org/4.10.0/index.htmlOpenCV Tutorial…

C#Halcon深度学习预热与否的运行时间测试

在深度学习推理应用阶段,涉及到提速,绕不开一个关键词“预热”。 在其他地方的“预热”,预先加热到指定的温度。通常指预习准备做某一样事时,为此做好准备。 而在深度学习推理应用阶段涉及的预热通常是指GPU预热,GPU在…

STM32-笔记18-呼吸灯

1、实验目的 使用定时器 4 通道 3 生成 PWM 波控制 LED1 ,实现呼吸灯效果。 频率:2kHz,PSC71,ARR499 利用定时器溢出公式 周期等于频率的倒数。故Tout 1/2KHZ;Ft 72MHZ PSC71(喜欢设置成Ft的倍数&…

OCR实践-问卷表格统计

前言 书接上文 OCR实践—PaddleOCROCR实践-Table-Transformer 本项目代码已开源 放在 Github上,欢迎参考使用,Star https://github.com/caibucai22/TableAnalysisTool 主要功能说明:对手动拍照的问卷图片进行统计分数(对应分数…

使用pandas把数据库中的数据转成csv文件

使用pandas把数据库中的数据转成csv文件 1、效果图 2、流程 1、连接数据库,获取数据 2、把一些中文字符转成gbk,忽略掉无法转化的 3、把数据转成csv 3、代码 import pymysql import pandas as pddef get_database(databasename):

windows下vscode使用msvc编译器出现中文乱码

文章目录 [toc]1、概述2、修改已创建文件编码3、修改vscode默认编码 更多精彩内容👉内容导航 👈👉C 👈👉开发工具 👈 1、概述 在使用MSVC编译器时,出现中文报错的问题可能与编码格式有关。UTF-…

传统听写与大模型听写比对

在快节奏的现代生活中,听写技能仍然是学习语言和提升认知能力的重要环节。然而,传统的听写练习往往枯燥乏味,且效率不高。现在,随着人工智能技术的发展,大模型听写工具的问世,为传统听写带来了革命性的变革…

前端页面上传文件:解决 ERR_UPLOAD_FILE_CHANGED

文章目录 引言I 问题 ERR_UPLOAD_FILE_CHANGED问题重现步骤原因II 解决方法将文件转换为base64再转回file检测文件内容是否发生变更III 知识扩展发送一个包含文件和文本的multipart/form-data请求签名优化引言 文件上传应用场景:船舶设备的新增导入(基础信息:出厂编号)船舶…

图文教程:使用PowerDesigner导出数据库表结构为Word/Html文档

1、第一种情况-无数据库表,但有数据模型 1.1 使用PowerDesigner已完成数据建模 您已经使用PowerDesigner完成数据库建模,如下图: 1.2 Report配置和导出 1、点击:Report->Reports,如下图: 2、点击&…

vscode 多项目冲突:进行 vscode 工作区配置

问题:多个项目,每次打开会因为配置问题/包版本冲突,花费过长时间。 解决:可以通过启用工作区,使得各个项目的开发环境隔离。 vscode官网 对此有两种方法:方法一:启用工作区(workspa…

试用ChatGPT的copilot编写一个程序从笔记本电脑获取语音输入和图像输入并调用开源大模型进行解析

借助copilot写代码和自己手写代码的开发过程是一样的。 首先要有明确的开发需求,开发需求越详细,copilot写出的代码才能越符合我们的预期。 其次,有了明确的需求,最好先做下需求拆解,特别是对于比较复杂的应用&#xf…

快速掌握Elasticsearch检索之二:滚动查询(scrool)获取全量数据(golang)

Elasticsearch8.17.0在mac上的安装 Kibana8.17.0在mac上的安装 Elasticsearch检索方案之一:使用fromsize实现分页 1、滚动查询的使用场景 滚动查询区别于上一篇文章介绍的使用from、size分页检索,最大的特点是,它能够检索超过10000条外的…

【分布式文件存储系统Minio】2024.12保姆级教程

文章目录 1.介绍1.分布式文件系统2.基本概念 2.环境搭建1.访问网址2.账号密码都是minioadmin3.创建一个桶4.**Docker安装miniomc突破7天限制**1.拉取镜像2.运行容器3.进行配置1.格式2.具体配置 4.查看桶5.给桶开放权限 3.搭建minio模块1.创建一个oss模块1.在sun-common下创建2.…

2021.12.28基于UDP同信的相关流程

作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…

StarRocks 存算分离在得物的降本增效实践

编者荐语&#xff1a; 得物优化数据引擎布局&#xff0c;近期将 4000 核 ClickHouse 迁移至自建 StarRocks&#xff0c;成本降低 40%&#xff0c;查询耗时减半&#xff0c;集群稳定性显著提升。本文详解迁移实践与成果&#xff0c;文末附丁凯剑老师 StarRocks Summit Asia 2024…

vue视频录制 限制大小,限制时长

<template><div style"height: 100vh;background: #000;"><span style"color: #fff;font-size: 18px;">切换数量&#xff1a;{{ devices.length }}</span><video ref"video" autoplay muted playsinline></vid…

若依框架之简历pdf文档预览功能

一、前端 &#xff08;1&#xff09;安装插件vue-pdf&#xff1a;npm install vue-pdf &#xff08;2&#xff09;引入方式&#xff1a;import pdf from "vue-pdf"; &#xff08;3&#xff09;components注入方式&#xff1a;components:{pdf} &#xff08;4&…

永磁同步电机负载估计算法--自适应龙伯格观测器

一、原理介绍 龙贝格扰动观测器的参数可以通过带宽配置法进行整定&#xff0c;将观测器带宽设为L&#xff0c;选取大的L可以加快观测器的收敛速度&#xff0c;但是L过大会导致系统阶跃响应出现超调、稳态性能差等问题。因此&#xff0c;在龙贝格观测器中引入表征系统状态变量x…

Python机器学习笔记(十七、分箱、离散化、线性模型与树)

数据表示的最佳方法&#xff1a;取决于数据的语义&#xff0c;所使用的模型种类。 线性模型与基于树的模型&#xff08;决策树、梯度提升树和随机森林&#xff09;是两种成员很多同时又非常常用的模 型&#xff0c;它们在处理不同的特征表示时就具有非常不同的性质。我们使用w…