说明:寒假任务是做一个带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爬取天气数据相关推荐

  1. Python爬取天气数据及可视化分析!

    来源丨Python之王 Python爬取天气数据及可视化分析 说在前面 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本 ...

  2. Python爬取天气数据及可视化分析

    Python爬取天气数据及可视化分析 文章目录 Python爬取天气数据及可视化分析 说在前面 1.数据获取 请求网站链接 提取有用信息 保存csv文件 2.可视化分析 当天温度变化曲线图 当天相对湿 ...

  3. Python爬取天气数据及可视化分析(附源码)

    大家好,我是辰哥(文末送书) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向.相对湿度.空气质量等成为关注的焦点.本次使用python中requests和Be ...

  4. python爬取天气数据山东_Python爬取天气预报数据,并存入到本地EXCEL中-Go语言中文社区...

    近期忙里偷闲,搞了几天python爬虫,基本可以实现常规网络数据的爬取,比如糗事百科.豆瓣影评.NBA数据.股票数据.天气预报等的爬取,整体过程其实比较简单,有一些HTML+CSS+DOM树等知识就很 ...

  5. python爬取天气数据_Python爬取历史天气数据

    Python爬取历史天气数据 作者:梅昊铭 1. 导读 之前Mo给大家分享过杭州历年天气情况的数据集,相信有不少小伙伴好奇这些数据是怎么获取.今天Mo就来教大家如何使用Python来进行历史天气数据的 ...

  6. Python爬取天气数据,并且进行天气预报(已实现)

    分析任意一个城市的天气状况 先分析网页 爬取数据 获取城市ID 获得城市的昨天与今天的气温 城市多音字问题 爬取城市的历史数据(用到正则匹配)并进行数据清洗 天气数据分析绘图 用机器学习进行气温预测 ...

  7. python爬取天气数据_用python爬取历史天气数据的方法示例

    某天气网站(www.数字.com)存有2011年至今的天气数据,有天看到一本爬虫教材提到了爬取这些数据的方法,学习之,并加以改进. 准备爬的历史天气 爬之前先分析url.左上有年份.月份的下拉选择框, ...

  8. python爬取天气数据_Python爬取天气情况

    一.设计方案 爬虫名称:爬取天气情况并进行可视化 爬虫内容:爬取2020年3月份莆田市天气情况 爬虫设计:目标url,获取网页源代码,数据提取,数据保存 二.页面的结构特征分析(网址:http://w ...

  9. python爬取天气数据山东_Python的学习《山东省各城市天气爬取》

    Python+scrapy爬取山东各城市天气预报 1.在命令提示符环境使用pip install scrapy命令安装Python扩展库scrapy,详见Python使用Scrapy爬虫框架爬取天涯社 ...

最新文章

  1. 程序清单3.3_bases.c程序_《C Primer Plus》P37
  2. 在一个字符串寻找另一个字符串,并且输出短字符串头字母在长字符串的下标...
  3. js bool true false 真假比较
  4. 丰农控股 CIO 王轶枭:万亿级农资市场,神策数据助力大丰收筑就数据驱动核心竞争力
  5. html自动执行的事件,js自执行事件
  6. st庞大股票股吧_黄金变石头!6倍大牛股提前锁定退市,市值蒸发98%,还有这些股票拉响警报(附名单)...
  7. 红帽子linux生效环境变量,RedHat Linux 5无法使用ifconfig的解决方法
  8. 基于Java、Kafka、ElasticSearch的搜索框架的设计与实现
  9. Java 数组与容器之间的转化 实现数组动态赋值
  10. 无法定位程序输入点WSAPoll于动态链接库WS2-32.DLL
  11. 【图像隐写】基于matlab LDPC编码译码改进DCT水印嵌入提取【含Matlab源码 832期】
  12. 【车牌识别】基于matlab GUI汽车出入库收费系统(带面板)【含Matlab源码 735期】
  13. Hadoop大数据技术原理与应用-第一章初识Hadoop
  14. 博途编程语言切换_从一种编程语言切换到另一种:灵活的好处
  15. PytorchVideo Transforms 详解
  16. instantDrag for Maya脚本 (移动模型时沿目标模型移动)
  17. 人似秋鸿来有信,事如春梦了无痕
  18. java学生成绩降序代码_输入5名学员成绩,降序排列输出
  19. C语言(求最小公倍数的3种方法)
  20. 实践丨分布式事务解决方案汇总:2PC、消息中间件、TCC、状态机+重试+幂等

热门文章

  1. php实现新闻浏览量,thinkphp实现统计页面浏览量
  2. python 列表编写 刮刮乐游戏
  3. php 默认图片,武磊西甲告别战再现“罕见”1幕:开场3分钟连续2次“抱怨”队友...
  4. mybatis在xml中的大于,小于等符号写法
  5. 【Python游戏】双人对战足球小游戏,堪比国足的技术 | 附带源码
  6. 尽管去做 ——无压工作的艺术
  7. 计算机应用班会,牢记嘱托 执着前行——计算机系召开学习王院长在毕业典礼上的讲话主题班会...
  8. php将证书保存位pem格式,openssl-如何以.pem格式保存证书中的公钥
  9. 在Oracle和MySQL上安装hr schema、example和Scott schema
  10. 隔行如隔山!大家来818各行业鲜为人知的内幕吧