基于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 相关文章推荐
如何搜索查找并解决Django相关的问题
Jun 30 Python
Python的内存泄漏及gc模块的使用分析
Jul 16 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
python 获取图片分辨率的方法
Jan 08 Python
django的settings中设置中文支持的实现
Apr 28 Python
Pandas_cum累积计算和rolling滚动计算的用法详解
Jul 04 Python
Django实现微信小程序的登录验证功能并维护登录态
Jul 04 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
Java文件与类动手动脑实例详解
Nov 10 Python
Python基于yaml文件配置logging日志过程解析
Jun 23 Python
序列化Python对象的方法
Aug 01 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与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
PHP实现简易blog的制作
2016/10/24 PHP
PHP实现微信图片上传到服务器的方法示例
2017/06/29 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
jquery插件开发之实现google+圈子选择功能
2014/03/10 Javascript
jquery实现鼠标拖拽滑动效果来选择数字的方法
2015/05/04 Javascript
chrome调试javascript详解
2015/10/21 Javascript
jquery实现图片放大镜功能
2015/11/23 Javascript
js检测iframe是否加载完成的方法
2015/11/26 Javascript
WEB 前端开发中防治重复提交的实现方法
2016/10/26 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
对于Javascript 执行上下文的全面了解
2017/09/05 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
jquery实现鼠标悬浮弹出气泡提示框
2020/12/23 jQuery
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Python PyCharm如何进行断点调试
2019/07/05 Python
解决pycharm debug时界面下方不出现step等按钮及变量值的问题
2020/06/09 Python
python中format函数如何使用
2020/06/22 Python
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
2018/02/07 HTML / CSS
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
几道数据库的概念性面试题
2014/05/30 面试题
公司领导推荐信
2013/11/12 职场文书
青年创业培训欢迎词
2014/01/10 职场文书
计算机毕业生自荐信范文
2014/03/23 职场文书
十佳党员事迹材料
2014/08/28 职场文书
七年级地理教学计划
2015/01/22 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
nginx刷新页面出现404解决方案(亲测有效)
2022/03/18 Servers
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript