赞
踩
爬取银川市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].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 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].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)))
屏幕显示结果如下:
导出表格数据如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。