有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 8599|回复: 89
收起左侧

[教程] bilibili 历史弹幕下载【Python】

[复制链接]

该用户从未签到

248

主题

54

好友

2万

积分

第一章

积分
23774
发表于 2014-1-1 21:28:15 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
作者为Kazuto_Kirigaya,也是WoW Next的作者

本文原地址点我


偶尔发现了 B 站的播放器上有 历史弹幕 这个按钮,于是就做了这个 Python 脚本来抓取所有的历史弹幕
源码:


[mw_shl_code=python,true]#!/usr/bin/env python
# -*- coding=utf-8 -*-
# 哔哩哔哩历史弹幕 (XML) 下载器
# 使用:downdanmu.py av314

import StringIO
import datetime
import gzip
import json
import os
import re
import urllib2
import zlib

# 接受参数 av****** 并创建 xml 保存目录
av_number = sys.argv[1]
xml_folder = r'./%s' % av_number
if os.path.exists(xml_folder):
    pass
else:
    os.makedirs(xml_folder)

# 处理 bilibili 视频页面
video_page_url = 'http://www.bilibili.tv/video/%s' % av_number
video_page_request = urllib2.Request(video_page_url)
video_page_gz = urllib2.urlopen(video_page_request).read()
# gzip 解压
# 方法来自 http://stackoverflow.com/a/3947241
video_page_buffer = StringIO.StringIO(video_page_gz)
video_page_html = gzip.GzipFile(fileobj = video_page_buffer).read()

# 获取视频 cid
cid_number = re.findall(r'cid=(\d+)', video_page_html)[0]

# 获取视频所有历史弹幕
comments_page_url = 'http://comment.bilibili.tv/rolldate,%s' % cid_number
comments_page_request = urllib2.Request(comments_page_url)
comments_page_zip = urllib2.urlopen(comments_page_request).read()
# deflate 解压
# 方法来自 http://stackoverflow.com/a/9583564
comments_page_json = zlib.decompressobj(-zlib.MAX_WBITS).decompress(comments_page_zip)

# 解析历史弹幕信息
comments_python_object = json.loads(comments_page_json)
for i in range(0, len(comments_python_object)):
    comment_timestamp = comments_python_object['timestamp']
    comment_date = datetime.datetime.fromtimestamp(int(comment_timestamp)).strftime('%Y%m%d')
    comment_then_url = 'http://comment.bilibili.tv/dmroll,%s,%s' % (comment_timestamp, cid_number)
    comment_then_request = urllib2.Request(comment_then_url)
    comment_then_zip = urllib2.urlopen(comment_then_request).read()
    comment_then_xml = zlib.decompressobj(-zlib.MAX_WBITS).decompress(comment_then_zip)
    comment_file = open('%s/%s.xml' % (xml_folder, comment_date), 'wb')
    comment_file.write(comment_then_xml)
    comment_file.close()
else:
    pass[/mw_shl_code]



TODO:
合并 XML 并去重
多线程下载




评分

参与人数 1宅币 +25 贡献 +4 收起 理由
胃痛君 + 25 + 4 o(* ̄▽ ̄*)ブ 发糖

查看全部评分

回复

使用道具 举报

该用户从未签到

20

主题

24

好友

9322

积分

序章

积分
9322
发表于 2014-1-1 23:54:41 | 显示全部楼层
大湿啊~!~
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

3

主题

27

好友

1万

积分

第一章

积分
11567
发表于 2014-1-2 08:58:36 | 显示全部楼层
经常上b站,这个很实用
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 1 反对 0

使用道具 举报

签到天数: 267 天

连续签到: 1 天

[LV.8]以坛为家I

5

主题

61

好友

5万

积分

第三章

积分
54629
发表于 2014-1-2 11:49:04 | 显示全部楼层
正在学python,求大神指点
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

248

主题

54

好友

2万

积分

第一章

积分
23774
 楼主| 发表于 2014-1-2 16:19:19 | 显示全部楼层
不变的心 发表于 2014-1-2 11:49
正在学python,求大神指点

我也正在学习中
回复 支持 反对

使用道具 举报

签到天数: 267 天

连续签到: 1 天

[LV.8]以坛为家I

5

主题

61

好友

5万

积分

第三章

积分
54629
发表于 2014-1-2 16:29:35 | 显示全部楼层

一起努力吧
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

5

主题

48

好友

1万

积分

第一章

积分
11582
发表于 2014-1-2 16:41:54 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

5

主题

48

好友

1万

积分

第一章

积分
11582
发表于 2014-1-2 16:43:16 | 显示全部楼层
代码好晕
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

5

主题

48

好友

1万

积分

第一章

积分
11582
发表于 2014-1-2 16:43:26 | 显示全部楼层
代码好晕
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

5

主题

48

好友

1万

积分

第一章

积分
11582
发表于 2014-1-2 16:45:41 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

6

主题

16

好友

3848

积分

序章

积分
3848
发表于 2014-1-4 12:41:35 | 显示全部楼层
还差一个恶啊
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

24

好友

9592

积分

吃货

积分
9592
发表于 2014-1-11 00:27:24 | 显示全部楼层
代码什么的、、、真是看着莫名的烦躁。。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

11

主题

22

好友

6274

积分

序章

积分
6274
发表于 2014-1-11 00:42:10 | 显示全部楼层
膜拜
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

1

主题

11

好友

3339

积分

序章

积分
3339
发表于 2014-1-11 10:38:52 | 显示全部楼层
有点不适应这个代码,#(这不是)
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

10

主题

14

好友

8841

积分

序章

积分
8841
发表于 2014-1-11 12:28:10 | 显示全部楼层
代码盲。。。。。。。。。。。。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-3-29 01:02 , Processed in 0.398369 second(s), 34 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表