程序員用 Python 扒出 B 站那些「驚爲天人」的UP主!

前言html

 

web

近期B站的跨年晚會因其獨特的創意席捲各大視頻網站,給公司帶來了極大的正面影響,股價也同時大漲,想必你們都在後悔沒有早點買B站的股票:編程

然而今天咱們要討論的不是B站的跨年晚會,而是B站的核心資源:「驚爲天人」的阿婆主們,文章的靈感來自於知乎熱榜上的一個問題:json

 

數據獲取api

 

上面的問題一共得到了859個回答,本文的數據也正來源於此,因爲不少回答都會將帶有阿婆主ID的連接在回答中體現,以下圖所示:cookie

咱們能夠將問題中出現的阿婆主空間id進行了爬取,但考慮到並非全部回答都會帶有這樣的ID,因而將一些加粗的字體進行了提取,從中得到一些阿婆主的名稱,做爲數據的補充:app

上面的這個回答就是一個典型的案例,其中提到了以前很是火的得到庫克生日祝福的小學生,提取數據的一些代碼以下:ide

# 開始爬取數據
driver = webdriver.Chrome()
driver.maximize_window()
url = 'https://www.zhihu.com/question/291506148'
js='window.open("'+url+'")'
driver.execute_script(js)
for i in range(1000):
     time.sleep(1)
     js="var q=document.documentElement.scrollTop=10000000"  
     driver.execute_script(js)
     print(i)

# 整理數據
all_html = [k.get_property('innerHTML') for k in driver.find_elements_by_class_name('AnswerItem')]
all_text = ''.join(all_html)
pat = '/space.bilibili.com/\d+'
spaces = list(set([k for k in re.findall(pat,all_text)]))
 

 

如今獲取到了要這些「驚爲天人」的阿婆主們的ID,下一步要作的就是須要爬取他們B站的我的空間,得到更多詳細的信息:工具

上面就是B站知名科學家手工耿的我的空間,從中咱們能夠獲取手工耿的粉絲數,視頻主要類型(一直覺得應該是科技,沒想到竟然是生活,B站節操能夠的)以及全部視頻平均的播放量、彈幕數、評論數,做爲後續進行排名的依據,部分代碼以下:學習

upstat = pd.DataFrame(columns=['name','fans','face','main_type','total_video',
                               'total_play', 'total_comment'])
for i in range(len(spaces)):
    try:
        time.sleep(1)
        space_id = str(spaces[i].replace('/space.bilibili.com/',''))
        url= 'https://api.bilibili.com/x/web-interface/card?mid={}&jsonp=jsonp&article=true'.format(space_id)
        html = requests.get(url=url, cookies=cookie, headers=header).content
        data = json.loads(html.decode('utf-8'))['data']
        this_name = data['card']['name']
        this_fans = data['card']['fans']
        this_face = data['card']['face']
        this_video = int(data['archive_count'])
        total_page = int((this_video-1)/30)+1
        video_list=[]
        for j in range(total_page):
            url = 'https://api.bilibili.com/x/space/arc/search?mid={}&ps=30&tid=0&pn={}&keyword=&order=click&jsonp=jsonp'.format(space_id,str(j+1))
            html = requests.get(url=url, cookies=cookie, headers=header).content
            data = json.loads(html.decode('utf-8'))
            if j == 0 :
                 type_list = data['data']['list']['tlist']
            this_list = data['data']['list']['vlist']
            video_list = video_list + [ this_list [k] for k in range(len(this_list))]
        type_list = list(type_list.values())
        type_list = {type_list[k]['name']:int(type_list[k]['count']) for k in range(len(type_list))}
        this_type = max(type_list,key=type_list.get)
        this_play = sum([video_list[k]['play'] for k in range(len(video_list)) if video_list[k]['play'] != '--'])
        this_comment = sum([video_list[k]['comment'] for k in range(len(video_list)) if video_list[k]['comment'] != '--'])
        upstat = upstat.append({'name':this_name,
                               'fans':this_fans,
                               'face':this_face,
                               'main_type':this_type,
                               'total_video':this_video,
                               'total_play':this_play,
                               'total_comment':this_comment},
                              ignore_index=True)
        print('success:'+str(i))
    except:
        print('fail:'+str(j))
        continue

最終咱們就得到了B站200多位「驚爲天人」的阿婆主們的信息,概覽數據以下:

 

整體概覽

 

得到了這些數據以後,咱們首先看一下這些「驚爲天人」阿婆主們發佈的視頻主要類型分佈:

因爲B站生活的分類中一應俱全,手工耿和李子柒都被劃歸到了生活類,想一想都玄幻,所以這一類型的視頻是分組多的,另外科技和數碼類的佔比也是很是多的,印證了B站是個優秀的學習網站的結論,有興趣的能夠參照另外一篇文章:你相信逛B站也能學編程嗎?

除此以外的視頻可統稱爲娛樂類,包括了遊戲、影視這些,以後會將視頻類型按照科技、生活、娛樂進行大的劃分,尋找各個類別最爲「驚爲天人」的阿婆主。

在開始進行正式的排名前,首先用Python將這些阿婆主的頭像進行拼接,得到下面的圖片,看看一眼望去有多少是你很是熟悉的阿婆主:

這部分代碼以下:

i = 0 
for i in range(upstat.shape[0]):
    loc = 'D:/爬蟲/驚爲天人/'+upstat['name'][i]+'.jpg'
 # request.urlretrieve(upstat['face'][i],loc)
    img = mpimg.imread(loc)[:,:,0:3]
    img = cv2.resize(img, (500,500),interpolation=cv2.INTER_CUBIC)
    if i % 20 == 0:
        row_img=img
    elif i == 19:
        row_img=np.hstack((row_img,img))
        all_img = row_img
    elif i % 20 == 19:
        row_img=np.hstack((row_img,img))
        all_img = np.vstack((all_img,row_img))
    else:
        row_img=np.hstack((row_img,img))
    i = i+1    
plt.axis('off')
plt.margins(0,0)
plt.imshow(all_img)
plt.savefig('頭像.png',dpi=1000)
 

 

 

綜合排名

 

下面要作的事情就比較大膽,要斗膽爲這些阿婆主們進行排名,綜合考慮他們的粉絲數,視頻平均彈幕數、播放量、評論數,得到一個綜合的指數,特此聲明:本排名僅供娛樂,如要深究,AWSL

首先看一下進入TOP10的阿婆主們:

小編近期剛剛被安利的巫師財經榜上有名,建議你們去看一下,真的是將複雜的金融知識說得很接地氣,華農兄弟和敬漢卿兩大知名阿婆主也榜上有名,下面再來看下TOP11-20的榜單:

徐大sao,李子柒和手工耿在榜單中同時出現,將來有機會,但願有人能策劃一次他們三人之間的合做,流程都想好了,手工耿爲李子柒提供後現代的工具,李子柒利用手工耿的神器製做世界上最辣的辣椒,以後由徐大Sao一口吃掉,手工耿最後再用本身的腦瓜崩爲徐大Sao緩解辣椒帶來的不適感

 

分類排名

 

進行完綜合排名以後,下面將全部阿婆主按照科技、生活、娛樂進行綜合排名,分別活得各個分類的TOP10:

有了分類排名後,你們就能夠按照本身的喜愛按需索取,相信看完以後,腦洞會語法變大,一段時間後能夠去嘗試本身在B站發佈視頻,成爲B站粉絲達到兩位數的知名(纔怪)阿婆主

最後用手工耿在B站播放量最多的一個視頻做爲本文的結尾,這個視頻很是好的體現了本文「驚爲天人」的主題,也但願你們能親自去嘗試一下,若是用完還能四肢健全地寫下使用感覺,歡迎與咱們分享

相關文章
相關標籤/搜索