beautifulSoup可以方便的爬取网络数据,下面代码为获取历史天气数据:
import requests
from bs4 import BeautifulSoup
import pandas as pd#获取天气数据
url='http://lishi.tianqi.com/chengdu/202209.html'
headers=headers = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'}#获取网站数据
def get_page(url,headers):html=requests.get(url,headers=headers)if html.status_code==200:html.encoding=html.apparent_encodingreturn html.textelse:return None#解析数据
htmltext=get_page(url,headers)
bs=BeautifulSoup(htmltext,features="html.parser")
data=bs.find_all("ul",class_="thrui")#查看解析数据
# print(type(data))
# print(data)#获取日期
dateBox=[]
weekBox=[]
date1=data[0].find_all('div',class_='th200')
for i in date1:temp=i.stringdateBox.append(temp[0:10])weekBox.append(temp[10:])#print(dateBox)
#print(weekBox)
#-----------------------------------------------------#获取最高温度、最低温度、天气和风力
maxTemp=[]
minTemp=[]
weather=[]
wind=[]date2=data[0].find_all('div',class_="th140")
length=len(date2)
i=0
while i<length:maxTemp.append(date2[i+0].string)minTemp.append(date2[i+1].string)weather.append(date2[i+2].string)wind.append(date2[i+3].string)i=i+4# print(maxTemp)
# print(minTemp)
# print(weather)
# print(wind)
#------------------------------------------------tempdatas=pd.DataFrame({'日期':dateBox,'星期':weekBox,'最高温度':maxTemp,'最低温度':minTemp,'天气':weather,'风向':wind})
print(tempdatas)
得到的结果:
日期 星期 最高温度 最低温度 天气 风向
0 2022-09-01 星期四 27℃ 18℃ 多云 南风 2级
1 2022-09-02 星期五 24℃ 18℃ 多云 东风 2级
2 2022-09-03 星期六 22℃ 18℃ 小雨 西南风 2级
3 2022-09-04 星期日 27℃ 19℃ 多云 西南风 2级
4 2022-09-05 星期一 32℃ 19℃ 雾 西南风 1级
5 2022-09-06 星期二 34℃ 20℃ 多云 西风 1级
6 2022-09-07 星期三 28℃ 19℃ 雾 北风 2级
7 2022-09-08 星期四 21℃ 18℃ 小雨 西北风 1级
8 2022-09-09 星期五 26℃ 18℃ 雾 南风 1级
9 2022-09-10 星期六 28℃ 19℃ 雾 东风 1级
10 2022-09-11 星期日 30℃ 20℃ 雾 西北风 1级
11 2022-09-12 星期一 30℃ 21℃ 多云 北风 3级
12 2022-09-13 星期二 27℃ 22℃ 阴 东北风 2级
13 2022-09-14 星期三 20℃ 19℃ 大雨 东北风 2级
14 2022-09-15 星期四 21℃ 19℃ 小雨 南风 1级
15 2022-09-16 星期五 24℃ 20℃ 雾 东北风 1级
16 2022-09-17 星期六 24℃ 21℃ 小雨 北风 1级
17 2022-09-18 星期日 26℃ 21℃ 雾 北风 1级
18 2022-09-19 星期一 24℃ 19℃ 雾 北风 2级
19 2022-09-20 星期二 24℃ 18℃ 阴 南风 1级
20 2022-09-21 星期三 26℃ 18℃ 多云 东南风 2级
21 2022-09-22 星期四 24℃ 17℃ 雾 北风 2级
22 2022-09-23 星期五 17℃ 15℃ 中雨 东北风 2级
23 2022-09-24 星期六 22℃ 16℃ 雾 东北风 1级
24 2022-09-25 星期日 25℃ 18℃ 雾 南风 1级
25 2022-09-26 星期一 22℃ 17℃ 小雨 北风 1级
26 2022-09-27 星期二 22℃ 17℃ 雾 南风 1级
27 2022-09-28 星期三 28℃ 17℃ 雾 南风 2级
28 2022-09-29 星期四 26℃ 19℃ 多云 西南风 1级
29 2022-09-30 星期五 28℃ 20℃ 雾 东风 2级