爬取银川市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 pd2.反爬操作,这里添加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。
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)))屏幕显示结果如下:
导出表格数据如下: