用Python扒出B站那些「驚為天人」的阿婆主!

  • 2020 年 2 月 12 日
  • 筆記

作者:徐麟,某互聯網公司數據分析獅,個人公眾號數據森麟(id:shujusenlin)

前言

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

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

數據獲取

上面的問題一共獲得了859個回答,本文的數據也正來源於此,由於很多回答都會將帶有阿婆主ID的鏈接在回答中體現,如下圖所示:

我們可以將問題中出現的阿婆主空間id進行了爬取,但考慮到並不是所有回答都會帶有這樣的ID,於是將一些加粗的字體進行了提取,從中獲得一些阿婆主的名稱,作為數據的補充:

上面的這個回答就是一個典型的案例,其中提到了之前非常火的獲得庫克生日祝福的小學生,提取數據的一些程式碼如下:

# 開始爬取數據  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站播放量最多的一個影片作為本文的結尾,這個影片非常好的體現了本文「驚為天人」的主題,也希望大家能親自去嘗試一下,如果用完還能四肢健全地寫下使用感受,歡迎與我們分享

寫在最後      希望通過本文,大家能夠找到自己喜歡的阿婆主,為自己2020新的一年帶來不一樣的精彩,後台回復「阿婆主」可以獲取本文程式碼和相關數據    ◆ ◆ ◆  ◆ ◆    長按二維碼關注我們  數據森麟公眾號的交流群已經建立,許多小夥伴已經加入其中,感謝大家的支援。大家可以在群里交流關於數據分析&數據挖掘的相關內容,還沒有加入的小夥伴可以掃描下方管理員二維碼,進群前一定要關注公眾號奧,關注後讓管理員幫忙拉進群,期待大家的加入。    管理員二維碼:    猜你喜歡  ● 笑死人不償命的知乎沙雕問題排行榜● 我用Python紀念了那些被爛片收割的智商稅!● 互聯網大佬學歷&背景大揭秘,看看是你的老鄉還是校友● 上萬條數據撕開微博熱搜的真相!● 你相信逛B站也能學編程嗎?