python爬取天气数据
说明:寒假任务是做一个带UI界面的天气预报软件,先上最终结果图。
其中用到的知识有:python网络爬虫、python的xlwt和xlwd库的使用,PyQt5的使用。
这里分享一下完成过程:
制作UI界面前先获取城市天气数据
一.爬取天气数据(有网)
第一步:找到合适的url链接
第二步:用python的urllib2库爬取对应城市的天气数据。
第三步:打印天气数据
有了思路,开始打代码:
import urllib.request
import gzip
import json
def get_weather_data() :city_name = input('请输入要查询的城市名称:')url1 = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name) #带后缀的url链接weather_data = urllib.request.urlopen(url1).read() #获取数据weather_data = gzip.decompress(weather_data).decode('utf-8') #调整编码形式weather_dict = json.loads(weather_data)return weather_dictdef show_weather(weather_data):weather_dict = weather_data if weather_dict.get('desc') == 'invilad-citykey':print('你输入的城市名有误,或者天气中心未收录你所在城市')elif weather_dict.get('desc') =='OK':forecast = weather_dict.get('data').get('forecast')print('城市:',weather_dict.get('data').get('city'))print('温度:',weather_dict.get('data').get('wendu')+'℃ ')print('感冒:',weather_dict.get('data').get('ganmao'))print('风向:',forecast[0].get('fengxiang'))print('高温:',forecast[0].get('high'))print('低温:',forecast[0].get('low'))print('天气:',forecast[0].get('type'))print('日期:',forecast[0].get('date'))
show_weather(get_weather_data())
结果:
请输入要查询的城市名称:深圳
城市: 深圳
温度: 22℃
感冒: 各项气象条件适宜,无明显降温过程,发生感冒机率较低。
风向: 无持续风向
高温: 高温 23℃
低温: 低温 19℃
天气: 多云
日期: 3日星期二
这里需要引用urllib.request、gzip、json库,不知道如何安装的话请查看我的另一篇博客:
https://editor.csdn.net/md/?articleId=104077502
二.爬取天气图片(有网)
第一步:找到合适的url链接
第二步:用python的request库爬取对应城市的当天天气图片。
第三步:保存天气图片至本地
思路和爬取文字天气数据差不多,但用到的是request库。
先上代码:
# coding=gbk
import requests
from bs4 import BeautifulSoup
import os
from xpinyin import Pinyin #引入拼音库
import time as t
# 获取网址
def getUrl(url):try:headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"} #天气网的User-Agentread = requests.get(url,headers = headers) #获取urlread.raise_for_status() #状态响应 返回200连接成功read.encoding = read.apparent_encoding #从内容中分析出响应内容编码方式return read.text #Http响应内容的字符串,即url对应的页面内容except:return "连接失败!"# 获取图片地址并保存下载
def getPic(html,pinyin):today_time = t.localtime(t.time())year = today_time.tm_yearmonth = today_time.tm_monday = today_time.tm_mdaysoup = BeautifulSoup(html, "html.parser")#通过分析网页内容,查找img的统一父类及属性all_img = soup.find('a',href = './2020-' + str(month) +'-' +str(day) + '.html').find('div', class_='mt').find_all('img') #img为图片的标识for img in all_img[:1]:src = img['src'] #获取img标签里的src内容img_url = srcprint(img_url)root = "F:/Pic/" + str(month) + '-' + str(day) + "/" #保存的路径path = root + pinyin + ".png" #保存 img的文件名print(path)try:if not os.path.exists(root): #判断是否存在文件并下载imgos.mkdir(root)if not os.path.exists(path):read = requests.get(img_url)with open(path, "wb")as f:f.write(read.content)f.close()print("文件保存成功!")else:print("文件已存在!")except:print("文件爬取失败!")# 主函数
if __name__ == "__main__":city_name = input("请输入城市名称")p = Pinyin()city_pinyin = p.get_pinyin(city_name,"") #将城市名称转为pinyin形 式,作为后缀html_url=getUrl("https://tianqi.911cha.com/" + city_pinyin )getPic(html_url,city_pinyin)
进入城市天气页面时,检查今天天气图片
发现img标签的父类是’div’,‘class = mt’,所以先find父类,再找出子类img。
因为’div’,‘class=mt’标签的父类是’a’,'href=./年-月-日’这里用到了python的time库,获取当天时间的年月日,精确获取当天天气图片.
all_img = soup.find('a',href = './2020-' + str(month) +'-' +str(day) + '.html').find('div', class_='mt').find_all('img') #img为图片的标识
如果用request方式打开一个URL,服务器端只会收到一个单纯的对于该页面访问的请求,但是服务器并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信息,而缺失这些信息的请求往往都是非正常的访问,例如爬虫。
有些网站为了防止这种非正常的访问,会验证请求信息中的UserAgent(它的信息包括硬件平台、系统软件、应用软件和用户个人偏好),如果UserAgent存在异常或者是不存在,那么这次请求将会被拒绝.
所以可以尝试在请求中加入UserAgent的信息
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"} #天气网的User-Agent
xpinyin库可将城市名称转为拼音形式
city_name = input("请输入城市名称")p = Pinyin()city_pinyin = p.get_pinyin(city_name,"") #将城市名称转为pinyin形 式,作为后缀
结果:
请输入城市名称:深圳
https://ii.911cha.com/tianqi/mico/9.png
F:/Pic/3-3/9.png
文件保存成功!
有网条件下的天气图片数据和文字数据都已经爬取成功
断网时的天气图片数据和文字数据爬取请看博客:
https://blog.csdn.net/Henry41132220011/article/details/104632615
python爬取天气数据相关推荐
- Python爬取天气数据及可视化分析!
来源丨Python之王 Python爬取天气数据及可视化分析 说在前面 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本 ...
- Python爬取天气数据及可视化分析
Python爬取天气数据及可视化分析 文章目录 Python爬取天气数据及可视化分析 说在前面 1.数据获取 请求网站链接 提取有用信息 保存csv文件 2.可视化分析 当天温度变化曲线图 当天相对湿 ...
- Python爬取天气数据及可视化分析(附源码)
大家好,我是辰哥(文末送书) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本次使用python中requests和Be ...
- python爬取天气数据山东_Python爬取天气预报数据,并存入到本地EXCEL中-Go语言中文社区...
近期忙里偷闲,搞了几天python爬虫,基本可以实现常规网络数据的爬取,比如糗事百科.豆瓣影评.NBA数据.股票数据.天气预报等的爬取,整体过程其实比较简单,有一些HTML+CSS+DOM树等知识就很 ...
- python爬取天气数据_Python爬取历史天气数据
Python爬取历史天气数据 作者:梅昊铭 1. 导读 之前Mo给大家分享过杭州历年天气情况的数据集,相信有不少小伙伴好奇这些数据是怎么获取.今天Mo就来教大家如何使用Python来进行历史天气数据的 ...
- Python爬取天气数据,并且进行天气预报(已实现)
分析任意一个城市的天气状况 先分析网页 爬取数据 获取城市ID 获得城市的昨天与今天的气温 城市多音字问题 爬取城市的历史数据(用到正则匹配)并进行数据清洗 天气数据分析绘图 用机器学习进行气温预测 ...
- python爬取天气数据_用python爬取历史天气数据的方法示例
某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进. 准备爬的历史天气 爬之前先分析url.左上有年份.月份的下拉选择框, ...
- python爬取天气数据_Python爬取天气情况
一.设计方案 爬虫名称:爬取天气情况并进行可视化 爬虫内容:爬取2020年3月份莆田市天气情况 爬虫设计:目标url,获取网页源代码,数据提取,数据保存 二.页面的结构特征分析(网址:http://w ...
- python爬取天气数据山东_Python的学习《山东省各城市天气爬取》
Python+scrapy爬取山东各城市天气预报 1.在命令提示符环境使用pip install scrapy命令安装Python扩展库scrapy,详见Python使用Scrapy爬虫框架爬取天涯社 ...
最新文章
- 程序清单3.3_bases.c程序_《C Primer Plus》P37
- 在一个字符串寻找另一个字符串,并且输出短字符串头字母在长字符串的下标...
- js bool true false 真假比较
- 丰农控股 CIO 王轶枭:万亿级农资市场,神策数据助力大丰收筑就数据驱动核心竞争力
- html自动执行的事件,js自执行事件
- st庞大股票股吧_黄金变石头!6倍大牛股提前锁定退市,市值蒸发98%,还有这些股票拉响警报(附名单)...
- 红帽子linux生效环境变量,RedHat Linux 5无法使用ifconfig的解决方法
- 基于Java、Kafka、ElasticSearch的搜索框架的设计与实现
- Java 数组与容器之间的转化 实现数组动态赋值
- 无法定位程序输入点WSAPoll于动态链接库WS2-32.DLL
- 【图像隐写】基于matlab LDPC编码译码改进DCT水印嵌入提取【含Matlab源码 832期】
- 【车牌识别】基于matlab GUI汽车出入库收费系统(带面板)【含Matlab源码 735期】
- Hadoop大数据技术原理与应用-第一章初识Hadoop
- 博途编程语言切换_从一种编程语言切换到另一种:灵活的好处
- PytorchVideo Transforms 详解
- instantDrag for Maya脚本 (移动模型时沿目标模型移动)
- 人似秋鸿来有信,事如春梦了无痕
- java学生成绩降序代码_输入5名学员成绩,降序排列输出
- C语言(求最小公倍数的3种方法)
- 实践丨分布式事务解决方案汇总:2PC、消息中间件、TCC、状态机+重试+幂等
热门文章
- php实现新闻浏览量,thinkphp实现统计页面浏览量
- python 列表编写 刮刮乐游戏
- php 默认图片,武磊西甲告别战再现“罕见”1幕:开场3分钟连续2次“抱怨”队友...
- mybatis在xml中的大于,小于等符号写法
- 【Python游戏】双人对战足球小游戏,堪比国足的技术 | 附带源码
- 尽管去做 ——无压工作的艺术
- 计算机应用班会,牢记嘱托 执着前行——计算机系召开学习王院长在毕业典礼上的讲话主题班会...
- php将证书保存位pem格式,openssl-如何以.pem格式保存证书中的公钥
- 在Oracle和MySQL上安装hr schema、example和Scott schema
- 隔行如隔山!大家来818各行业鲜为人知的内幕吧