用户:
王诩烨查看:0 回复:2 评论:0 创建时间:2022-03-19T10:24:27
【作品展示】

【作品介绍】
可以爬天气,时间在最上面的网址最后面的202202上面改,前四位是年,后两位是月。
【作品源代码】
import requests
import pandas as pd
from bs4 import BeautifulSoup
url = 'http://www.tianqihoubao.com/lishi/putian/month/202202.html'
resp = requests.get(url)
html = resp.content.decode('gbk')
soup = BeautifulSoup(html,'html.parser')
tr_list = soup.find_all('tr')
dates,conditions,temp = [],[],[]
for data in tr_list[1:]:
sub_data = data.text.split()
dates.append(sub_data[0])
conditions.append(''.join(sub_data[1:3]))
temp.append(''.join(sub_data[3:6]))
_data = pd.DataFrame()
_data['日期'] = dates
_data['天气情况'] = conditions
_data['气温'] = temp
_data.to_csv('putian.csv',index=False,encoding='utf-8')
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
data = pd.read_csv('putian.csv')
data['最高气温'] = data['气温'].str.split('/',expand=True)[0]
data['最低气温'] = data['气温'].str.split('/',expand=True)[1]
data['最高气温'] = data['最高气温'].map(lambda x:int(x.replace('℃','')))
data['最低气温'] = data['最低气温'].map(lambda x:int(x.replace('℃','')))
dates = data['日期']
highs = data['最高气温']
lows = data['最低气温']
fig = plt.figure(dpi=128,figsize=(10,6))
plt.plot(dates,highs, c='red',alpha=0.5)
plt.plot(dates,lows, c='blue',alpha=0.5)
plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)
plt.xlabel('',fontsize=6)
fig.autofmt_xdate()
plt.ylabel('气温',fontsize=12)
plt.tick_params(axis='both',which='major',labelsize=10)
plt.xticks(dates[::1])
plt.show()
x = highs
y = lows
x.corr(y)
x = highs
y = lows
plt.xlabel('最高温度',fontsize=12)
plt.ylabel('最低温度',fontsize=12)
plt.scatter(x,y,color='purple',linewidth=2)
plt.show()
import numpy as np
from scipy.optimize import leastsq
X = np.array(highs)
Y = np.array(lows)
def func(params, x):
k, b = params
return k*x+b
def error(params,x,y):
return func(params,x) - y
def main():
plt.figure(figsize=(10,6))
p0 = [0,0]
Para = leastsq(error, p0, args=(X,Y))
k, b = Para[0]
print("k={:.2f},b={:.2f}".format(k,b))
plt.scatter(X,Y,color='green',label='样本数据',linewidth=2)
x = np.linspace(1,30,30)
y = k*x+b
plt.plot(x,y,color='red',label='拟合曲线',linewidth=2)
plt.grid()
plt.legend()
plt.show()
main()
fig = plt.gcf()
plt.show()
fig.savefig('putian.png', dpi=100)
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn