基于Python获取城市近7天天气预报
这篇文章主要介绍了基于Python获取城市近7天天气预报,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
首先,我们打开中国天气网,找到黄石市近7天天气的网页。
http://www.weather.com.cn/weather/101200601.shtml
然后按F12开始分析网页结构,找到各个标签,并分析它们的作用。h1:日期;p:天气;tem-span:最高温;tem-i:最低温;win:风;em:风向;win-i:风力。
接下来,我们需要找到它的用户代理,即User-agent。
分析的差不多了,我们就开始写代码,下面是我写的全部代码及运行结果:
importre
importrequests
frombs4importBeautifulSoup
defget_page(url):#获取URL
try:
headers={'user-agent':'Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/75.0.3770.90Safari/537.36'}
r=requests.get(url,headers)
r.raise_for_status()
r.encoding=r.apparent_encoding
returnr.text
except:
return'出现异常'#异常处理,防止出现错误
defparse_page(html,weather_list):
soup=BeautifulSoup(html,'html.parser')
day_list=soup.find('ul','tclearfix').find_all('li')
fordayinday_list:
date=day.find('h1').get_text()
wea=day.find('p','wea').get_text()
ifday.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])
defprint_wea(weather_list):
s='\t'*3
print(s.join(('日期','天气','最低温','最高温','风向','风力')))
foriinweather_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])#按格式输出
defmain():
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()
在格式输出这方面,我的这份代码还存在着很大的缺陷,把它发出来,欢迎大家跟我一起讨论,改进。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。