溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化

發(fā)布時(shí)間:2022-01-13 15:52:04 來(lái)源:億速云 閱讀:1104 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

前言

先上視頻看看效果:

python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化

一、爬取微博熱搜內(nèi)容

微博熱搜網(wǎng)址為:

https://s.weibo.com/top/summary

python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化

經(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ù)就弄好了

二、開始畫動(dòng)態(tài)圖

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()

python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化

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>

爬取微博熱搜,實(shí)現(xiàn)數(shù)據(jù)可視化,制作動(dòng)態(tài)可視化圖

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()

python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化

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()

爬取微博熱搜,實(shí)現(xiàn)數(shù)據(jù)可視化,制作動(dòng)態(tài)可視化圖

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ù)可視化

以上是“python如何爬取微博熱搜并實(shí)現(xiàn)數(shù)據(jù)可視化”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI