天气预报数据爬虫实例
爬取天气预报数据
爬取银川市30天天气预报数据,包含时间、温度、空气质量等信息,将爬取到的信息显示到屏幕上,同时将数据保存到excel表。
功能描述
输入:天气预报网站url链接https://www.tianqi.com/yinchuan/30/
输出:30天天气预报屏幕输出(时间,风向,温度,空气质量)
技术路线:requests-bs4
可行性分析:网页源码如下,分析可从html提取信息
爬取的网页界面如下:

网页源码如下:

代码及思路分析
1.导入库,requests库用于访问url连接,BeautifulSoup库用于提取网页信息,pandas库用于将爬取的数据导出到excel表格。
import requests
from bs4 import BeautifulSoup
import bs4
import 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_encoding
demo=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].stringulist.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 requests
from bs4 import BeautifulSoup
import bs4
import pandas as pd
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"}
ulist=[]
r=requests.get(url,headers=headers)
r.raise_for_status()
r.encoding=r.apparent_encoding
demo=r.text
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].stringulist.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)))
屏幕显示结果如下:

导出表格数据如下:

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
