基于Python获取城市近7天天气预报


Posted in Python onNovember 26, 2019

这篇文章主要介绍了基于Python获取城市近7天天气预报,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

首先,我们打开中国天气网,找到黄石市近7天天气的网页。

http://www.weather.com.cn/weather/101200601.shtml

基于Python获取城市近7天天气预报

然后按F12开始分析网页结构,找到各个标签,并分析它们的作用。h1:日期;p:天气;tem-span:最高温;tem-i:最低温;win:风;em:风向;win-i:风力。

基于Python获取城市近7天天气预报

接下来,我们需要找到它的用户代理,即User-agent。

基于Python获取城市近7天天气预报

分析的差不多了,我们就开始写代码,下面是我写的全部代码及运行结果:

import re
import requests
from bs4 import BeautifulSoup

def get_page(url): #获取URL
  try:
    headers = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.90 Safari/537.36'}
    r = requests.get(url,headers)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    return r.text
  except:
    return '出现异常' #异常处理,防止出现错误

def parse_page(html, weather_list):
  soup = BeautifulSoup(html, 'html.parser')
  day_list = soup.find('ul', 't clearfix').find_all('li')
  for day in day_list:
    date = day.find('h1').get_text()
    wea = day.find('p', 'wea').get_text()
    if day.find('p', 'tem').find('span'): #判断标签'p','tem'下是否有标签'span',以此判断是否有最高温
        tem_h = day.find('p', 'tem').find('span').get_text()
    else:
        tem_h = '' #最高温
    tem_l = day.find('p', 'tem').find('i').get_text() #最低温
    win1 = re.findall('(?<= title=").*?(?=")', str(day.find('p','win').find('em')))
    win2 = '-'.join(win1) #风向,win1-win2
    level = day.find('p', 'win').find('i').get_text() #风力
    weather_list.append([date, wea, tem_l, tem_h, win2, level])


def print_wea(weather_list):
  s = ' \t' * 3
  print(s.join(('日期', '天气', '最低温', '最高温', '风向', '风力')))
  for i in weather_list:
    print(i[0], '\t',i[1],'\t\t\t',i[2],'\t\t\t',i[3],'\t\t',i[4],'\t\t',i[5]) #按格式输出

def main():
  url = 'http://www.weather.com.cn/weather/101200601.shtml'
  html = get_page(url)
  wea_list = []
  parse_page(html, wea_list)
  print("\t\t\t\t\t\t\t\t\t黄石市近7天天气预报")
  print_wea(wea_list)

if __name__ == '__main__':
  main()

基于Python获取城市近7天天气预报

在格式输出这方面,我的这份代码还存在着很大的缺陷,把它发出来,欢迎大家跟我一起讨论,改进。

Python 相关文章推荐
python每次处理固定个数的字符的方法总结
Jan 29 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Python实现简单字典树的方法
Apr 29 Python
Python学生信息管理系统修改版
Mar 13 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
python实现差分隐私Laplace机制详解
Nov 25 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
Feb 17 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
python 实现一个图形界面的汇率计算器
Nov 09 Python
NumPy中的维度Axis详解
Nov 26 #Python
python列表推导式操作解析
Nov 26 #Python
Python 实现Numpy中找出array中最大值所对应的行和列
Nov 26 #Python
简单了解python数组的基本操作
Nov 26 #Python
python实现图片插入文字
Nov 26 #Python
python NumPy ndarray二维数组 按照行列求平均实例
Nov 26 #Python
python向图片里添加文字
Nov 26 #Python
You might like
php 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
JavaScript 闭包深入理解(closure)
2009/05/27 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
利用javascript实现一些常用软件的下载导航
2009/08/03 Javascript
jquery弹出框的用法示例(2)
2013/08/26 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
js导出txt示例代码
2014/01/14 Javascript
浅谈javascript的Array.prototype.slice.call
2015/08/31 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
jQuery动态生成Bootstrap表格
2016/11/01 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
jQuery实现可兼容IE6的滚动监听功能
2017/09/20 jQuery
在vue中,v-for的索引index在html中的使用方法
2018/03/06 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
使用JS监听键盘按下事件(keydown event)
2019/11/07 Javascript
js实现随机抽奖
2020/03/19 Javascript
python实现网站的模拟登录
2016/01/04 Python
Python文件和流(实例讲解)
2017/09/12 Python
Python离线安装PIL 模块的方法
2019/01/08 Python
python 实现手机自动拨打电话的方法(通话压力测试)
2019/08/08 Python
Python缓存技术实现过程详解
2019/09/25 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
HTML5页面无缝闪开的问题及解决方案
2020/06/11 HTML / CSS
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
Topshop美国官网:英国快速时尚品牌
2019/05/16 全球购物
九年级数学教学反思
2014/02/02 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python