爬取B站程序猿up主,分析程序猿up出哪些类型的视频会受欢迎

优采云 发布时间: 2020-08-19 20:25

  爬取B站程序猿up主,分析程序猿up出哪些类型的视频会受欢迎

  文章目录

  前言

  我,一个天天早起,睡前必刷B站的菜鸡程序猿,昨天见到一位关注的程序猿up主发布的动态,心里太不好受,所以才想着做此次的内容

  

  到底程序猿up主做哪些类型的视频就会受大众喜欢呢?

  不想看文字就点击图片去看B站我的视频吧,之前似乎可以直接导出视频的,现在iframe不知道为何失效了

  

  开始动手1.首先须要去采集数据

  选择到搜索去搜程序猿,然后选择视频,弹幕最多(也就是真实观看的人比较多),去得到每一个视频的链接。

  

  这样我们就先得到每位视频对应的详情页链接,然后再从详情页用xpath去得到标题,up名,up主页等信息(在这个页面直接得到视频点赞数和播放数最后保存的结果是异常值),点赞数和播放数用api去得到。

  

  

  api只须要视频的id就可以返回相应的json结果,所以得到也是比较便捷的,最后保存到csv文件。

  爬虫代码:

  import requests

from lxml import etree

import time

import pandas as pd

import re

import json

#https://search.bilibili.com/video?keyword=%E7%A8%8B%E5%BA%8F%E7%8C%BF&order=dm&duration=0&tids_1=36&tids_2=122&page=32

def get_html(url,header):

html=requests.get(url,headers=header).text

return html

def get_all_page(n):

urls=[]

for i in range(1,n+1):

url=f"https://search.bilibili.com/video?keyword=%E7%A8%8B%E5%BA%8F%E7%8C%BF&order=dm&duration=0&tids_1=36&tids_2=122&page={i}"

html=get_html(url,headers)

selector = etree.HTML(html)

li_list=selector.xpath("//ul[@class='video-list clearfix']")

for li in li_list:

urls.extend(li.xpath("//li[@class='video-item matrix']/a/@href"))

return urls

def get_information(urls,avid):

space_url=[]

name_list=[]

views_list=[]

dz_list=[]

video_names=[]

count=0

for url in urls:

count+=1

if count==10:

time.sleep(1)

url=url.replace('//','https://')

print("正在爬取:",url)

html=get_html(url,headers1)

selector = etree.HTML(html)

space_url.append(selector.xpath("//div[@class='name']/a[1]/@href")[0])

name_list.append(selector.xpath("//div[@class='name']/a[1]/text()")[0])

video_names.append(selector.xpath("//h1/@title")[0])

# views_list.append(selector.xpath("//div[@class='video-data']/span[1]/text()")[0])

# dz_list.append(selector.xpath("//div[@class='ops']/span[1]/text()")[0])

for id in avid:

base_url="https://api.bilibili.com/x/web-interface/view?aid="

html=get_html(base_url+id,headers2)

res=json.loads(html)

video_info = res['data']

views_list.append(video_info["stat"]["view"])

dz_list.append(video_info["stat"]["like"])

return space_url,name_list,views_list,dz_list,video_names

def save(n):

urls=get_all_page(n)

avid=[]

for i in urls:

avid.append(re.findall("\d+",i)[0])

space_url,name_list,views_list,dz_list,video_names=get_information(urls,avid)

data=pd.DataFrame({"空间链接":space_url,"up主":name_list,"视频名":video_names,"视频播放次数":views_list,"视频点赞数":dz_list})

data.to_csv('./B站程序猿up主视频信息.csv',encoding='utf8')

print("所有数据爬取完毕")

if __name__ == '__main__':

headers = {

'Host': 'search.bilibili.com',

'Referer': 'https//www.bilibili.com/',

'Sec-Fetch-Mode': 'navigate',

'Sec-Fetch-Site': 'same-origin',

'Sec-Fetch-User': '?1',

'Upgrade-Insecure-Requests': '1',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'

}

headers1 = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',

'Host': 'www.bilibili.com',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.9',

'Cache-Control': 'max-age=0',

'Connection': 'keep-alive'

}

headers2={

'Host': 'api.bilibili.com',

'Sec-Fetch-Mode': 'navigate',

'Sec-Fetch-Site': 'none',

'Sec-Fetch-User': '?1',

'Upgrade-Insecure-Requests': '1',

'User-Agent': 'Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 79.0.3945 .130Safari / 537.36'

}

n=int(input("请输入想要爬取的页数:"))

save(n)

  我爬取了十页,一共200条数据

  

  2.开始数据剖析

  基本的导库和导出数据,并且重命名列名

  

  然后对数据清洗和预处理,查看缺失值异常值。但是因为B站数据比较友好,没有异常缺位值。

  

  然后分组剖析点赞数多的up和播放数多的up

  

  

  这一部分用groupby很简单就实现了,所以只上对点赞的剖析绘图代码

  # 找到视频点赞数最多的up主

most_dz=data.groupby(by=data['up主名'],as_index=False)['视频点赞数'].sum()

most_dz.columns=['up主名','视频点赞总数']

most_dz.head()

#降序排序

most_dz=most_dz.sort_values(by=['视频点赞总数'],ascending=False)

most_dz.head(10)

# 可视化点赞数前20的up主

plt.figure(figsize=(13,10))

sns.barplot(most_dz['up主名'][:20],most_dz['视频点赞总数'][:20])

plt.title('程序猿up主视频点赞总数前20', fontsize=22)

plt.grid()

plt.xticks(rotation=90)

plt.show()

  3.查看各图中第一的视频类型

  

  我发觉迷糊老师出的视频涉及到编程的比较少,大多是涉及到日常笔记本使用高阶操作的视频。看来我之后要是想点赞数多应当少出点涉及到编程的,多出点能使听众日常使用到的视频 毕竟编程类教学视频都是被埋在采集夹里了,我的采集夹里都有一大堆

  

  纳尼,就只有一个视频就737万+的播放数,这也很强了吧。同时也说明还是有很多人还是乐意在B站学习编程的,特别是python相关的视频似乎非常火

  4.做个总结

  总结:

  在B站教学类视频有很大几率会被放进采集夹喝灰,所以程序猿up主们要紧抓观众们的喜好来创作视频,比如python系列的教学视频就太受欢迎(原因也是python生态好,学上去简单),或者是一些日常笔记本高阶操作的教学的视频,这些都是比较容易吸引到听众的。

  从亲爱的程序羊不能步入前20更能发觉这个问题:程序羊的视频质量是很高的,但是受用群体不大,因为他的视频几乎都是讲程序猿的修练,没太多简单易学的,相反大多都是程序猿们认为太有意义,但是圈外人听着一脸懵,根本如同听天书一样的。哈哈,不过对于我们这种程序猿来说这样的up主简直就是宝藏up,也正是由于他选择讲对程序猿最有益的一些内容,放弃一些其他利益,这也能够使我们学到更多更好的知识。

  再来瞧瞧一些出发点不同的程序猿up,比如张大米的日常。他能有如此高观看数和点赞数的诱因就是他的视频既兼具了程序猿,利用程序猿的梗可以给我们带来欢乐,同时也照料了其他群体,从一些不这么高深的计算机知识出发,可以使听众更了解程序猿的生活,而且每位视频宽度太短,符合现今短视频的趋势。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线