您好,登錄后才能下訂單哦!
小編給大家分享一下python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
先上視頻看看效果:
微博熱搜網(wǎng)址為:
https://s.weibo.com/top/summary
經(jīng)分析,微博熱搜數(shù)據(jù)就在網(wǎng)頁(yè)中,可以直接requests請(qǐng)求,然后BeautifulSoup解析獲取內(nèi)容,最后存入表格中,代碼如下(完整代碼在文末):
for i, item in enumerate(items[1:11]): result = [] rank = '第{0}名'.format(i+1) # 微博排名 num = str(item.find('span')).replace('<span>', '').replace('</span>', '') # 微博熱度 title = item.find('a').text # 微博內(nèi)容 result.append(time_stamp) result.append(rank) result.append(num) result.append(title) with open('1.csv', 'a+',newline='') as f: f_csv = csv.writer(f) f_csv.writerow(result)
微博熱搜一般是1分鐘更新一次,所以再給代碼加個(gè)定時(shí)器:
schedule.every(1).minutes.do(run) #run為自定義熱搜爬蟲函數(shù),設(shè)置1分鐘爬取1次 while True: schedule.run_pending()
讓程序跑一會(huì),我們的數(shù)據(jù)就弄好了
1.pandas讀取數(shù)據(jù)
import pandas as pd data=pd.read_csv('微博熱搜.csv',encoding='gbk')
2.基本動(dòng)態(tài)圖畫法
from pyecharts import options as opts from pyecharts.charts import Bar, Timeline from pyecharts.faker import Faker x = Faker.choose()tl = Timeline()for i in range(2015, 2020): bar = ( Bar() .add_xaxis(x) .add_yaxis("", Faker.values()) .set_global_opts(title_opts=opts.TitleOpts("某商店{}年?duì)I業(yè)額".format(i))) ) tl.add(bar, "{}年".format(i)) tl.render_notebook()
2.將圖形反轉(zhuǎn),導(dǎo)入橫坐標(biāo)(排名)、縱坐標(biāo)(熱度)
tl = Timeline() for i in range(20): bar = ( Bar() .add_xaxis(list(data['內(nèi)容'])[i*10:i*10+10][::-1]) .add_yaxis("微博熱搜榜", list(data['熱度'])[i*10:i*10+10][::-1]) .reversal_axis() .set_global_opts(title_opts=opts.TitleOpts("某商店{}年?duì)I業(yè)額".format(i))) ) tl.add(bar, "{}年".format(i))tl.render_notebook()` </pre>
3.將標(biāo)簽放置在圖形右邊,將圖形整體右移
from pyecharts.charts import Bar, Timeline,Grid tl = Timeline()for i in range(20): bar = ( Bar() .add_xaxis(list(data['內(nèi)容'])[i*10:i*10+10][::-1]) .add_yaxis("微博熱搜榜", list(data['熱度'])[i*10:i*10+10][::-1]) .reversal_axis() .set_global_opts(title_opts=opts.TitleOpts("某商店{}年?duì)I業(yè)額".format(i))) .set_series_opts(label_opts=opts.LabelOpts(position="right")) #將標(biāo)簽放置在圖形右邊 ) tl.add(bar, '') grid = ( Grid() .add(bar, grid_opts=opts.GridOpts(pos_left="25%",pos_right="0%")) #將圖形整體右移 ) tl.add(grid, '')tl.render_notebook()
4.設(shè)置播放速度,隱藏timeline組件,設(shè)置自動(dòng)播放
tl = Timeline() for i in range(20): bar = ( Bar() .add_xaxis(list(data['內(nèi)容'])[i*10:i*10+10][::-1]) .add_yaxis("微博熱搜榜", list(data['熱度'])[i*10:i*10+10][::-1]) .reversal_axis() .set_global_opts(title_opts=opts.TitleOpts("某商店{}年?duì)I業(yè)額".format(i))) .set_series_opts(label_opts=opts.LabelOpts(position="right")) #將標(biāo)簽放置在圖形右邊 ) tl.add(bar, "") grid = ( Grid() .add(bar, grid_opts=opts.GridOpts(pos_left="25%",pos_right="0%")) #將圖形整體右移 ) tl.add(grid, "") tl.add_schema( play_interval=100, #播放速度 is_timeline_show=False, #是否顯示 timeline 組件 is_auto_play=False,) #是否自動(dòng)播放 tl.render_notebook()
5.設(shè)置主題,增加時(shí)間標(biāo)簽
tl = Timeline({"theme": ThemeType.MACARONS}) for i in range(20): bar = ( Bar({"theme": ThemeType.MACARONS}) .add_xaxis(list(data['內(nèi)容'])[i*10:i*10+10][::-1]) .add_yaxis("微博熱搜榜", list(data['熱度'])[i*10:i*10+10][::-1]) .reversal_axis() .set_global_opts( title_opts=opts.TitleOpts("{}".format(list(data['時(shí)間'])[i*10]),pos_right='0%',pos_bottom='15%'), xaxis_opts=opts.AxisOpts( splitline_opts=opts.SplitLineOpts(is_show=True)), yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True), axislabel_opts=opts.LabelOpts(color='#FF7F50')),) .set_series_opts(label_opts=opts.LabelOpts(position="right",color='#9400D3')) ) grid = ( Grid() .add(bar, grid_opts=opts.GridOpts(pos_left="25%",pos_right="0%")) ) tl.add(grid, "{}年".format(i)) #設(shè)置標(biāo)簽 tl.add_schema( play_interval=100, #播放速度 is_timeline_show=False, #是否顯示 timeline 組件 is_auto_play=True, ) tl.render_notebook()
以上是“python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。