python爬虫天气后报数据可视化

python爬虫天气后报数据可视化,为什么我输入的是三个月的天气数据最后得到的图像只是每个月的第一天的数据可视化?求帮忙解决下感谢!!

import data as data
import fig as fig
import requests
from bs4 import BeautifulSoup
import pandas as pd
from urllib3.util import url


def get_data(url):
    resp = requests.get(url)
    # print(resp.text)
    html = resp.content.decode('gbk')
    soup = BeautifulSoup(html, 'html.parser')
    # print(soup)
    tr_list = soup.find_all('tr')
    # print(tr_list)
    dates, conditions, temp = [], [], []
    for data in tr_list[1:]:
        sub_data = data.text.split()
        # print(sub_data)
        dates.append(sub_data[0])  #
        conditions.append(''.join(sub_data[1:3]))  #
        # print(conditions)  #
        temp.append(''.join(sub_data[3:6]))  #

        # print(temp)
        _data = pd.DataFrame()
        _data['日期'] = dates
        _data['天气状况'] = conditions
        _data['气温'] = temp

        return _data


data_1_month = get_data('http://www.tianqihoubao.com/lishi/handan/month/202301.html')
data_2_month = get_data('http://www.tianqihoubao.com/lishi/handan/month/202302.html')
data_3_month = get_data('http://www.tianqihoubao.com/lishi/handan/month/202303.html')

data = pd.concat([data_1_month, data_2_month, data_3_month]).reset_index(drop=True)
# print(data)

data.to_csv('handan.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('handan.csv')
# print((data.isnull()).sum())
# print(data.head())
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['最低气温']

plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red', alpha=0.5)
plt.plot(dates, lows, c='red', alpha=0.5)
plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.2)
plt.title('2023年1-3月邯郸天气', fontsize=24)
plt.xlabel('', fontsize=6)
fig.autofmt_xdate()
plt.ylabel('气温', fontsize=12)
plt.tick_params(axis='both', which='major', labelsize=10)
plt.xticks(dates)[::20]
plt.show()



  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7638252
  • 你也可以参考下这篇文章:真实难过,当python爬虫对上淘宝和天猫,我又失败了!
  • 除此之外, 这篇博客: 【python数据分析实战】电商打折套路解析(1)—— 各个品牌都有多少商品参加了双十一活动?中的 5. 未参与双十一当天活动的商品,在双十一之后的去向如何? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这里按照四个condition进行考虑,主要是处理E、F中的数据

         con1 → 暂时下架(F)
         con2 → 重新上架(E中部分数据,数据中同一个id可能有不同title,“换个马甲重新上架”)
         con3 → 预售(E中部分数据,预售商品的title中包含“预售”二字),字符串查找特定字符 df.str.contains(‘预售’)
         con4 → 彻底下架(E中部分数据),可忽略

    1)找到未参与双十一当天活动的商品id并筛选出原始数据

    id_not11 = id_data[id_data['sale']==False]  # 筛选出双十一当天没参加活动的产品id
    print('双十一当天没参加活动的商品总数为{}个,占比为{:.2f}%\n-------'.format(len(id_not11),len(id_not11)/m*100))
    print('双十一当天没参加活动的商品销售节奏类别为:\n',id_not11['type'].value_counts().index.tolist())
    

    –> 输出结果为:(其中G类商品只是满足双十一之后销售,但是双十一之前并没有销售,所以G类商品不在这次的处理之内,也就是上面说的主要处理EF类数据)

    双十一当天没参加活动的商品总数为1167个,占比为33.32%
    -------
    双十一当天没参加活动的商品销售节奏类别为:
     ['E', 'F', 'G']
    

    筛选出未参与双十一当天活动商品id对应的原始数据

    df_not11 = id_not11[['id','type']]
    data_not11 = pd.merge(df_not11,df,on = 'id', how = 'left')
    print(data_not11.head(15))
    

    –> 输出结果为:
    在这里插入图片描述
    2) 筛选出con1的商品数据

    就是筛选处F类商品的数据即可

    id_con1 = id_data['id'][id_data['type'] == 'F'].values
    

    3) 筛选出con2的商品数据

    data_con2 = data_not11[['id','title','date']].groupby(by = ['id','title']).count() 
    title_count = data_con2.reset_index()['id'].value_counts() 
    id_con2 = title_count[title_count>1].index
    

    –> 输出结果为:(按照idtitle字段进行数据的汇总,这样就会保留一个id对应多个title的商品数据了,然后在对id字段进行统计长度就知道con2条件下的商品数量了)

    4) 筛选出con3的商品数据

    data_con3 = data_not11[data_not11['title'].str.contains('预售')]   
    id_con3 = data_con3['id'].value_counts().index 
    

    5) 输出三种condition下的商品情况

    print("未参与双十一当天活动的商品中:\n暂时下架商品的数量为{}个,重新上架商品的数据量为{}个,预售商品的数据量为{}个" 
          .format(len(id_con1), len(id_con2), len(id_con3)))
    

    –> 输出结果为:

    未参与双十一当天活动的商品中:
    暂时下架商品的数量为242个,重新上架商品的数据量为110个,预售商品的数据量为453
  • 您还可以看一下 CSDN就业班老师的Python全栈工程师特训班第十一期-直播回放课程中的 Python全栈工程师特训班第十一期-第一周4小节, 巩固相关知识点