美文网首页
爬取某站流行作者视频作品数据的分析

爬取某站流行作者视频作品数据的分析

作者: 西5d | 来源:发表于2020-08-20 10:03 被阅读0次

背景

目前各种视频业务非常火爆,前有短视频如某音,某手,以及一般的优爱腾影视,综艺平台,而现在很多公司也开始聚焦用户长视频如B站,因此有了获取作者视频信息来做简单分析的想法。比较下来,B站视频更贴近用户,内容丰富,而且有很多可以直接使用的数据接口,能够较快的获取目标数据。

执行思路

这里简单的概括下,先只考虑比较热门作者的内容,然后获取基础的内容数据,包括标题,分类,时长等。拿到原始数据后,就可以使用各种工具来进行对应多个维度的分析,从而得到想要的结果。这里以分析流行用户的时长数据为例展开。首先人工获取流行的作者,然后根据作者id获取到视频详细数据,之后简单用excel透视表来统计对应作者视频的长度等。

实现代码

这里采用python3来实现。

# -*- coding: utf-8 -*-

import json
import time
import requests

headers = {
    'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36',
    'cookie': 'CURRENT_FNVAL=16; _uuid=9D0F15EA-7B1A-6351-82A4-D6BB1CECA46544155infoc; buvid3=8595AC31-6932-4419-BCDF-5CB85BD6D9F0138369infoc; sid=7jq1j6ji; LIVE_BUVID=AUTO8215971455316379; DedeUserID=662763504; DedeUserID__ckMd5=b318a22451f4750e; SESSDATA=d1e54698%2C1612697574%2C37842*81; bili_jct=7affbe69799d32231a3c6708277dd286; bfe_id=5db70a86bd1cbe8a88817507134f7bb5; PVID=1',
}

es_host = 'http://127.0.0.1:9200/'

file_name = 'data.txt'

def save_es(data):
    index = 'bili_stat'
    url = es_host + index + '/_doc/'
    res = requests.post(url=url, json=data)
    if res.status_code == 200:
        print(res.text)


def query_user_video(mid):
    if len(mid) == 0:
        return
    url_fmt = 'https://api.bilibili.com/x/space/arc/search?mid={}&ps=30&tid=36&pn={}&keyword=&order=pubdate&jsonp=jsonp'
    referer = 'https://space.bilibili.com/{}/video?tid=36&keyword=&order=pubdate'.format(mid)

    data_list = []
    pn = 1
    while True:
        url = url_fmt.format(mid, pn)
        headers.update({'referer': referer})
        res = requests.get(url=url, headers=headers)
        time.sleep(1)
        if res.status_code == 200:
            res_json = json.loads(res.text)
            if res_json['code'] == 0 and 'list' in res_json['data'].keys() and 'vlist' in res_json['data']['list'].keys():
                vlist = res_json['data']['list']['vlist']
                print('mid:{},pn:{},size:{}'.format(mid, pn, len(vlist)))
                pn = pn + 1
                for v in vlist:
                    v['timestamp'] = int(time.time())
                    x = {'bvid': v['bvid'], 'author': v['author'], 'mid': v['mid'], 'length': v['length'], 'duration': convert(v['length'])}
                    data_list.append(x)
                    save_es(v)
                if len(vlist) < 30:
                    break
            else:
                break
        else:
            print('mid:{}, invalid code:{}'.format(mid, res.status_code))
            break
    if len(data_list) > 0:
        with open(file_name, mode='a') as f:
            for e in data_list:
                f.write(to_line(e))
        f.close()


def to_line(x):
    return x['author'] + '\t' + str(x['mid']) + '\t' + x['bvid'] + '\t' + x['length'] + '\t' + str(x['duration']) + '\n'


def convert(length):
    # 01:34 -> 60*1+34 = 94
    arr = length.split(':')
    return 60 * int(arr[0]) + int(arr[1])


def run_mids():
    with open('mid.txt', 'r') as f:
        lines = f.readlines()
        for l in lines:
            l = l[:-1]
            # print(l)
            query_user_video(l)


run_mids()
# query_user_video(str(378885845))

有几个需要注意的地方

  1. 这里作者id是保存到一个mid.txt文本中的,里边是流行的20个内容创作者。
  2. 核心的接口space/arc/search如果频繁调用会被禁止访问很长一段时间,返回状态码为412,亲测只有更换IP才能重新访问,所以这里简单做了限制,每次请求sleep 1秒。
  3. 最后的内容保存在data.txt。每个作者的内容获取完成之后,保存到data_list[]中,最后刷给文件
  4. 使用了ES来保存原始数据,如果本地没有的可以去掉这里,看save_es方法。
  5. 这里视频有分类,tid=36代表知识

结果展示

获取的数据内容举例。
基本数据:

罗翔说刑法   517327498   BV1264y1c7e6    09:48   588
哔哩哔哩直播  9617619 BV11K4y1Y7VK    31:05   1865
罗翔说刑法   517327498   BV1dk4y1m7oJ    09:37   577
罗翔说刑法   517327498   BV1gV411U7pd    05:41   341
罗翔说刑法   517327498   BV1UK4y1v7nm    12:38   758
罗翔说刑法   517327498   BV1Zf4y1X7Kt    10:29   629
罗翔说刑法   517327498   BV1A54y1D743    07:55   475
罗翔说刑法   517327498   BV1vk4y1m7g2    06:32   392
罗翔说刑法   517327498   BV1CZ4y1T7JD    13:47   827

分析结果:


结果

结语

以上就是本期内容。有兴趣的可以考虑获取更大量的数据,来做更严谨的数据分析。

相关文章

网友评论

      本文标题:爬取某站流行作者视频作品数据的分析

      本文链接:https://www.haomeiwen.com/subject/zocsjktx.html