基于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单链表简单实现代码
Apr 27 Python
深入解析Python中的线程同步方法
Jun 14 Python
Python正则抓取新闻标题和链接的方法示例
Apr 24 Python
Python将多个excel文件合并为一个文件
Jan 03 Python
python验证码识别实例代码
Feb 03 Python
对Python中gensim库word2vec的使用详解
May 08 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
python实现基于信息增益的决策树归纳
Dec 18 Python
利用Python半自动化生成Nessus报告的方法
Mar 19 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
Mar 27 Python
Python能做什么
Jun 02 Python
10行Python代码实现Web自动化管控的示例代码
Aug 14 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安全配置方法
2007/06/16 PHP
Ha0k 0.3 PHP 网页木马修改版
2009/10/11 PHP
Ajax PHP 边学边练 之三 数据库
2009/11/26 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
js确定对象类型方法
2012/03/30 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
javascript实现继承的简单实例
2015/07/26 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
详解Bootstrap插件
2016/04/25 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
python3 图片referer防盗链的实现方法
2018/03/12 Python
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
2018/06/28 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
python  创建一个保留重复值的列表的补码
2018/10/15 Python
python Event事件、进程池与线程池、协程解析
2019/10/25 Python
python实现批量文件重命名
2019/10/31 Python
pd.DataFrame统计各列数值多少的实例
2019/12/05 Python
python实现用类读取文件数据并计算矩形面积
2020/01/18 Python
python 如何快速复制序列
2020/09/07 Python
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
村官工作鉴定评语
2014/01/27 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
支行行长竞聘演讲稿
2014/05/15 职场文书
大学毕业生推荐信
2014/07/09 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
交通事故协议书范本
2014/11/18 职场文书
接待员岗位职责
2015/02/13 职场文书
2015年小学教科研工作总结
2015/07/20 职场文书
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis
如何开启Apache,Nginx和IIS服务器的GZIP压缩功能
2022/04/29 Servers