爬取B站历史播放记录并可视化统计

哔哩哔哩综合大学,年轻团伙的集聚地吖!源码已上传到GitHub:源码地址

当然一开始就是查看网站的robots协议合法编程了,总不能面向监狱编程吧。协议规定网络蜘蛛能爬取目录,但规定不能爬取的目录内容一般情况下也很难爬得到。

 

 

而历史播放记录接口:https://api.bilibili.com/x/v2/history?pn=1&jsonp=jsonp,是允许爬取的,那就开始写爬虫程序了。还有,这时个人的播放记录需要登录账号后获取cookie信息并设置请求头才能够抓取到个人播放记录。当然,兄弟为了对象也信任我,把他的cookie信息给我了,【注意:cookie信息涉及隐私安全问题,尽量不要随意发送给别人】

 

设置请求头:

def setUp_header(cookies):
    """
    存在反爬机制,设置请求头
    :param cookies: 你的账号下的cookie
    :return: 请求头
    """
    headers = {
        'Accept': '*/*',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
        'Connection': 'keep-alive',
        'Cookie': cookies,
        'Host': 'api.bilibili.com',
        'Referer': 'https://www.bilibili.com/account/history',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/83.0.4103.116 Safari/537.36'
    }
    return headers

 

页面数据内容:

 

打开之后是json格式的。

preview查看页面数据大致的结构:

 

 

使用代码提取需要的数据:

def get_info(jsonData):
    """
    提取json数据下我们需要数据
    :param jsonData: 爬取到的数据
    :return: 我们需要的字典列表信息
    """
    info = []
    for data in jsonData['data']:
        dict = {
            'aid': data['aid'],
            'cid': data['cid'],
            'name': data['owner']['name'],
            'tname': data['tname'],
            'title': data['title'],
            'view': data['stat']['view'],
            'danmaku': data['stat']['danmaku'],
            'reply': data['stat']['reply'],
            'favorite': data['stat']['favorite'],
            'coin': data['stat']['coin'],
            'share': data['stat']['share'],
            'like': data['stat']['share']
        }
        info.append(dict)
    return info

 

可视化统计数据

主要使用到matplotlib和pandas基本库,同时也使用了jieba和wordcount两个库实现词云绘制。

 

知识区(社科人文、野生技术协会、校园学习、科学科普、财经、职业职场)总共占37%了,生活区(日常、汽车、搞笑、美食圈)也是占37%。饼图统计规则:观看分区类别观看次数少于10的为其他,所以只能是大概的简单统计。在学习,爱生活实锤了。

 

 

 

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00