利用上次爬取的微博熱搜榜單進行改進,對微博熱搜榜單進行數據分析,額外爬取了榜單的熱度值
本次實現的主要問題在於圖像的正確表現上
一是對於字符串在圖表上如何實現,另一是標題字符串過長的問題
對於字符串的寫入,采用了先繪制不帶字符串的圖表,在將相應字體(字體在電腦的fonts文件夾下選擇)的字符串配置到x軸
配置完成后,因為字符串過長而重疊,所有使用rotation=90講使字符串垂直寫入
此時字符串長度還是超出了界面,所以設置bottom(底面)的值使字符串完整顯示
代碼如下:
import requests
from bs4 import BeautifulSoup
from matplotlib import pyplot as plt
from matplotlib import font_manager
#配置字體
my_font=font_manager.FontProperties(fname='C:\Windows\Fonts\SIMLI.TTF')
r=requests.get('https://s.weibo.com/top/summary')
soup=BeautifulSoup(r.text,'html.parser')
a=soup.find_all('td','td-02')
t=[]
s=[]
for i in a[1:]:
i=i.contents
t.append(list(i)[1].string)#標題
s.append(int(list(i)[3].string))#熱度值
plt.figure(figsize=(15,10))
plt.subplots_adjust(bottom=0.45)#調整下底
plt.bar(range(len(t)),s)#繪制圖表
plt.xticks(range(len(t)),t,fontproperties=my_font,rotation=90)#配置字符串
plt.show()
效果如下
榜單是實時更新的,所有你在不同時候運行程序將得到不同的數據
本次的設計主要是學會了在圖表中字符串的處理,以及在爬取過程中加深對HTML代碼的理解和認識