2011至2020年武汉历史天气数据采集与分析
本实验主要采用了Python中的beautifulsoup库、pandas库、requests库来爬取’http://lishi.tianqi.com/wuhan’内近十年武汉的天气。
实验环境:Python下的beautifulsoup库、pandas库、requests库
实验内容:2011年至2020年年武汉历史天气数据
实验目的:运用所学网络爬虫技术,爬取武汉近十年的历史天气(http://lishi.tianqi.com/wuhan)。
实验步骤:
① 导入requests库、beautifulsoup库和pandas 库。requests库用于处理HTTP请求的第三方库;bs4库用于解析和处理HTML和XML的第三方库;使用pandas 库存储非数值数据。
② 定义一个函数,利用循环导出2011年至2020年的武汉天气的相关网址。
③ 爬取数据,并进行整合处理。
实验代码:
import requests
from bs4 import BeautifulSoup
import pandas as pd
cookies = {‘cookies’:‘UM_distinctid=175583cf8801f8-097a18d2b1557c-f7b1332-190140-175583cf881978; CNZZDATA1275796416=1099497312-1603503040-%7C1603503040; Hm_lvt_ab6a683aa97a52202eab5b3a9042a8d2=1603503192; Hm_lpvt_ab6a683aa97a52202eab5b3a9042a8d2=1603503192’}
headers = {‘User-Agent’:‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36’}
def getTianqi(url):
rawhtml = requests.get(url,headers = headers,cookies=cookies).content
soup = BeautifulSoup(rawhtml, ‘html.parser’)
tqdiv = soup.find_all('div', {'class': "tian_three"})
lis = tqdiv[0].find_all('li')
dates = [ li.find_all('div')[0].string for li in lis]
maxtemp = [ int(li.find_all('div')[1].string.replace('℃','')) for li in lis]
mintemp = [ int(li.find_all('div')[2].string.replace('℃','')) for li in lis]
tianqi = [ li.find_all('div')[3].string for li in lis]
fengxiangfengli = [ li.find_all('div')[4].string for li in lis]
tq = pd.DataFrame({
'date': dates,
'maxtemp': maxtemp,
'mintemp' : mintemp,
'tianqi': tianqi,
'fengxiang' : fengxiangfengli,
})
return tq
TianqiData = pd.DataFrame({})
import time
for year in range(2011,2021):
for month in range(1,13):
month = ‘%02d’ % month
url = ‘http://lishi.tianqi.com/wuhan/’ + str(year) + month + ‘.html’
df = getTianqi(url)
TianqiData = pd.concat([TianqiData, df], ignore_index=True)
TianqiData
实验结果: