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.mzph.cn/bicheng/65652.shtml

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

相关文章

MySQL线上事故:使用`WHERE`条件`!=xxx`无法查询到NULL数据

前言 在一次 MySQL 的线上查询操作中,因为 ! 的特性导致未能正确查询到为 NULL 的数据,险些引发严重后果。本文将详细解析 NULL 在 SQL 中的行为,如何避免类似问题,并提供实际操作建议。 1. 为什么NULL会查询不到? 在…

Solidworks打开无法获得许可,提示(-15,10,10061)错误解决办法

参考文章: https://blog.csdn.net/2301_81263647/article/details/140904773

【电路理论四】正弦电流电路

正弦电流 正弦量是随时间按正弦规律变动的电路变量。 随时间按正弦规律变动的电流称为正弦电流。 正弦电流的瞬时值表达式: 称为正弦电流的三要素。 分别为振幅/幅值,角频率,初相。 幅值为正弦电流的最大值,恒为正。 为正弦电…

解决Windows无法同时使用有线网和无线网WIFI的问题

参考资料 电脑无线网wifi和有线网同时使用(内网外网同时使用)用route命令解决Wifi和网卡不能同时上内外网问题 解决方法 对于Windows系统同时连接有线网和无线网Wifi时,只会有一个网关生效,因此我们需要手动通过route命令设置网…

FOC控制原理-ADC采样时机

0、文章推荐 SimpleFOC移植STM32(五)—— 电流采样及其变换_极对数对电流采样的影响-CSDN博客 FOC 电流采样方案对比(单电阻/双电阻/三电阻) - 知乎 (zhihu.com) FOC中的三种电流采样方式,你真的会选择吗?…

uniapp:编译微信、h5都正常的,编译钉钉小程序无法找到页面

我们在做uniapp的开发的时候遇到很多莫名其妙的问题,其中就有个很奇葩的问题,我们开发的过程中使用微信小程序/h5调试都是正常编译正常跳转,然后在要上架的时候,编译钉钉小程序成功,但是访问页面无法访问, …

zentao ubuntu上安装

#下载ZenTaoPMS-21.2-zbox_amd64.tar.gz(https://www.zentao.net/downloads.html) https://dl.zentao.net/zentao/21.2/ZenTaoPMS-21.2-zbox_amd64.tar.gzcd /opt tar -zxvf ZenTaoPMS-21.2-zbox_amd64.tar.gz#启动 /opt/zbox/zbox start /opt/zbox/zbox…

REDIS2.0

string list hash set 无序集合 声明一个key,键里面的值是元素,元素的类型是string 元素的值是唯一的,不能重复 多个集合类型之间可以进行并集,交集,集查的运算 sadd test1 a b c c d :添加5个元素&am…

【论文阅读】DebSDF:深入研究神经室内场景重建的细节和偏差

【论文阅读】DebSDF:深入研究神经室内场景重建的细节和偏差 Abstract3.METHOD3.1 Preliminaries3.2 Uncertainty Guided Prior Filtering3.3 Uncertainty-Guided Ray Sampling3.4 Uncertainty-Guided Smooth Regularization3.5 Bias-aware SDF to Density Transform…

微服务SpringCloud分布式事务之Seata

视频教程:https://www.bilibili.com/video/BV16P63Y3ESq 效果演示 准备的微服务项目调用的链路如下: 文字描述: gateway模块接收到请求,并发送到order订单模块order订单模块接收到请求,新增一个订单数据后发送一个…

Pyhton知识分享-利用KNN算法实现手写数字识别

利用KNN算法实现手写数字识别 MNIST手写数字识别 是计算机视觉领域中 "hello world"级别的数据集 1999年发布,成为分类算法基准测试的基础随着新的机器学习技术的出现,MNIST仍然是研究人员和学习者的可靠资源。 本次案例中,我们的…

多点通信、流式域套接字

一、广播 1.1广播的发送端模型&#xff1a; #include<myhead.h>#define BEN_IP "192.168.191.129" #define BEN_PORT 8888#define PORT 6666int main(int argc, const char *argv[]) {int oldfd socket(AF_INET,SOCK_DGRAM,0);if(oldfd -1){perror("soc…

AMBA-APB

目录 1.APB 协议 2.APB信号列表 3.数据传输 3.1写传输&#xff08;2种&#xff09; 3.1.1 无等待状态的写传输 3.1.2有等待状态的写传输 3.2写选通信号 (PSTRB) 字节通道映射 3.3读传输&#xff08;2种&#xff09; 3.3.1 无等待状态的读传输 3.3.2有等待状态的读传…

linux自动化一键批量检查主机端口

1、准备 我们可以使用下面命令关闭一个端口 sudo iptables -A INPUT -p tcp --dport 端口号 -j DROP我关闭的是22端口&#xff0c;各位可以关其它的或者打开其它端口测试&#xff0c;谨慎关闭22端口&#xff01;不然就会像我下面一样握手超时&#x1f62d;&#x1f62d;&…

【服务器】上传文件到服务器并训练深度学习模型下载服务器文件到本地

前言&#xff1a;本文教程为&#xff0c;上传文件到服务器并训练深度学习模型&#xff0c;与下载服务器文件到本地。演示指令输入&#xff0c;完整的上传文件到服务器&#xff0c;并训练模型过程&#xff1b;并演示完整的下载服务器文件到本地的过程。 本文使用的服务器为云服…

从零开始开发纯血鸿蒙应用之逻辑封装

从零开始开发纯血鸿蒙应用 一、前言二、逻辑封装的原则三、实现 FileUtil1、统一的存放位置2、文件的增删改查2.1、文件创建与文件保存2.2、文件读取2.2.1、读取内部文件2.2.2、读取外部文件 3、文件删除 四、总结 一、前言 应用的动态&#xff0c;借助 UI 响应完成&#xff0…

python读写文件的三种做法

对于文件操作&#xff0c;python提供了3种做法&#xff1a;open(), os.open() 和with open()语句。 1. open()函数&#xff1a;一般用于更高级的文件读写操作&#xff0c;即人能读懂的用法&#xff0c;如果是写入数据&#xff0c;可用传入字符串。 用法&#xff1a;open(path…

MySQL如何只取根据某列连续重复行的第一条记录

前言 MySQL如何只取根据某列连续重复行的第一条记录&#xff0c;条件&#xff1a;某列、连续、验重 建表准备 DROP TABLE IF EXISTS test; CREATE TABLE test (id bigint NOT NULL,time datetime NULL DEFAULT NULL,price int NULL DEFAULT NULL,PRIMARY KEY (id) USING BT…

Fetch处理大模型流式数据请求与解析

为什么有的大模型可以一次返回多个 data&#xff1f; Server-Sent Events (SSE)&#xff1a;允许服务器连续发送多个 data: 行&#xff0c;每个代表一个独立的数据块。 流式响应&#xff1a;大模型服务通常以流式响应方式返回数据&#xff0c;提高响应速度。 批量处理&#x…

【数据结构】链表(1):单向链表和单向循环链表

链表 链表是一种经典的数据结构&#xff0c;它通过节点的指针将数据元素有序地链接在一起&#xff0c;在链表中&#xff0c;每个节点存储数据以及指向其他节点的指针&#xff08;或引用&#xff09;。链表具有动态性和灵活性的特点&#xff0c;适用于频繁插入、删除操作的场景…