首页 > 编程知识 正文

气象数据网,天气数据

时间:2023-05-06 14:37:52 阅读:266949 作者:2792

爬取天气预报数据

爬取银川市30天天气预报数据,包含时间、温度、空气质量等信息,将爬取到的信息显示到屏幕上,同时将数据保存到excel表。

功能描述

输入:天气预报网站url链接https://www.tianqi.com/yinchuan/30/
输出:30天天气预报屏幕输出(时间,风向,温度,空气质量)
技术路线:requests-bs4
可行性分析:网页源码如下,分析可从html提取信息
爬取的网页界面如下:

网页源码如下:

代码及思路分析

1.导入库,requests库用于访问url连接,BeautifulSoup库用于提取网页信息,pandas库用于将爬取的数据导出到excel表格。

import requestsfrom bs4 import BeautifulSoupimport bs4import pandas as pd

2.反爬操作,这里添加hearder,让爬虫模拟浏览器访问网页

url='https://www.tianqi.com/yinchuan/30/'headers={ "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400"}

若不加hearder则会报如下错误:

3.通过requests库访问url链接获取天气预报网页内容,新建ulist列表用于存放爬取的数据,r.raise_for_status()判断状态码是否为200,不为200,则产生异常requests.HTTPError,最后将爬取的网页文本保存在demo。

ulist=[]r=requests.get(url,headers=headers)r.raise_for_status()r.encoding=r.apparent_encodingdemo=r.text

4.使用BeautifulSoup库提取信息并存放在ulist列表中

soup=BeautifulSoup(demo,'html.parser')for tr in soup.find('ul','weaul').children: if isinstance(tr,bs4.element.Tag): tds = tr.find_all('div') tqs=tr('span') time=tds[0].string.split("r")[0] wendu=tqs[0].string+'~'+tqs[1].string ulist.append([time,tds[4].string,wendu,tqs[2].string])

5.利用pandas库将列表数据导出到excel表,并将信息显示在屏幕上

dataframe=pd.DataFrame(ulist)dataframe.to_excel('list1.xls')tplt="{0:{4}^10}t{1:{4}^10}t{2:^10}t{3:^10}"print(tplt.format("时间","风向","温度","空气质量",chr(12288)))for i in range(30): u=ulist[i] print(tplt.format(u[0],u[1],u[2],u[3],chr(12288))) 代码及结果

代码如下:

import requestsfrom bs4 import BeautifulSoupimport bs4import pandas as pdurl='https://www.tianqi.com/yinchuan/30/'headers={ "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400"}ulist=[]r=requests.get(url,headers=headers)r.raise_for_status()r.encoding=r.apparent_encodingdemo=r.textsoup=BeautifulSoup(demo,'html.parser')for tr in soup.find('ul','weaul').children: if isinstance(tr,bs4.element.Tag): tds = tr.find_all('div') tqs=tr('span') time=tds[0].string.split("r")[0] wendu=tqs[0].string+'~'+tqs[1].string ulist.append([time,tds[4].string,wendu,tqs[2].string])dataframe=pd.DataFrame(ulist)dataframe.to_excel('list1.xls')tplt="{0:{4}^10}t{1:{4}^10}t{2:^10}t{3:^10}"print(tplt.format("时间","风向","温度","空快三三期必中口诀和技巧aders={ "user-agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3766.400 QQBrowser/10.6.4163.400"}ulist=[]r=requests.get(url,headers=headers)r.raise_for_status()r.encoding=r.apparent_encodingdemo=r.textsoup=BeautifulSoup(demo,'html.parser')for tr in soup.find('ul','weaul').children: if isinstance(tr,bs4.element.Tag): tds = tr.find_all('div') tqs=tr('span') time=tds[0].string.split("r")[0] wendu=tqs[0].string+'~'+tqs[1].string ulist.append([time,tds[4].string,wendu,tqs[2].string])dataframe=pd.DataFrame(ulist)dataframe.to_excel('list1.xls')tplt="{0:{4}^10}t{1:{4}^10}t{2:^10}t{3:^10}"print(tplt.format("时间","风向","温度","空气质量",chr(12288)))for i in range(30): u=ulist[i] print(tplt.format(u[0],u[1],u[2],u[3],chr(12288)))

屏幕显示结果如下:

导出表格数据如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。