基于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中的__new__()方法的使用
Apr 09 Python
python中self原理实例分析
Apr 30 Python
安装Python和pygame及相应的环境变量配置(图文教程)
Jun 04 Python
Python用户推荐系统曼哈顿算法实现完整代码
Dec 01 Python
Django基于ORM操作数据库的方法详解
Mar 27 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
python绘制随机网络图形示例
Nov 21 Python
Python-openCV读RGB通道图实例
Jan 17 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
Mar 31 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
Python生成随机验证码代码实例解析
Jun 09 Python
scrapy处理python爬虫调度详解
Nov 23 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的库,结果发现很多东西
2006/12/31 PHP
php下拉选项的批量操作的实现代码
2013/10/14 PHP
destoon安装出现Internal Server Error的解决方法
2014/06/21 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
js判断子窗体是否关闭的方法
2015/08/11 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
JS简单生成随机数(随机密码)的方法
2017/05/11 Javascript
前端主流框架vue学习笔记第二篇
2017/07/26 Javascript
JavaScript监听手机物理返回键的两种解决方法
2017/08/14 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
2017/12/11 Javascript
原生JS实现手动轮播图效果实例代码
2018/11/22 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
Python实现的简单算术游戏实例
2015/05/26 Python
python 读入多行数据的实例
2018/04/19 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
介绍一下游标
2012/01/10 面试题
优秀求职信范文分享
2014/01/26 职场文书
公司聘任书模板
2014/03/29 职场文书
英文推荐信格式范文
2014/05/09 职场文书
党的群众路线学习材料
2014/05/16 职场文书
北京奥运会口号
2014/06/21 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
个人借款协议书范本
2014/11/17 职场文书
校本课程教学计划
2015/01/19 职场文书
单位考核聘任报告
2015/03/02 职场文书
运动会100米广播稿
2015/08/19 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书