B站原视频爬取,我就不多说直接上代码。直接运行就好。
B站是把视频和音频分开。要把2个合并起来使用。这个需要分析才能看出来。然后就是登陆这块是比较难的。
import os
import re
import argparse
import subprocess
import prettytable
from DecryptLogin import login
'''B站类'''
class Bilibili():
def __init__(self, username, password, **kwargs):
self.username = username
self.password = password
self.session = Bilibili.login(username, password)
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
}
self.user_info_url = 'http://api.bilibili.com/x/space/acc/info'
self.submit_videos_url = 'http://space.bilibili.com/ajax/member/getSubmitVideos'
self.view_url = 'http://api.bilibili.com/x/web-interface/view'
self.video_player_url = 'http://api.bilibili.com/x/player/playurl'
'''运行主程序'''
def run(self):
while True:
userid = input('请输入目标用户ID(例:345993405)(我的一个LOL好友凯撒可以关注他一下 谢谢) ——> ')
user_info = self.__getUserInfo(userid)
tb = prettytable.PrettyTable()
tb.field_names = list(user_info.keys())
tb.add_row(list(user_info.values()))
print('获取的用户信息如下:')
print(tb)
is_download = input('是否下载该用户的所有视频(y/n, 默认: y) ——> ')
if is_download == 'y' or is_download == 'yes' or not is_download:
self.__downloadVideos(userid)
'''根据userid获得该用户基本信息'''
def __getUserInfo(self, userid):
params = {
'mid': userid, 'jsonp': 'jsonp'}
res = self.session.get(self.user_info_url, params=params, headers=self.headers)
res_json = res.json()
user_info = {
'用户名': res_json['data']['name'],
'性别': res_json['data']['sex'],
'个性签名': res_json['data']['sign'],
'用户等级': res_json['data']['level'],
'生日': res_json['data']['birthday']
}
return user_info
'''下载目标用户的所有视频'''
def __downloadVideos(self, userid):
if not os