Python 스 크 립 트 를 써 서 삐 리 삐 리 댄스 구역 의 모든 동 영상 을 다운로드 하 세 요.
우선 댄스 구역 을 열 고 택 무 목록 을 선택 하 세 요.
그리고 F12 제어 판 을 열 면
https://api.bilibili.com/x/web-interface/newlist?rid=20&type=0&pn=1&ps=20&jsonp=jsonp&callback=jsonCallback_bili_57905715749828263
url 을 찾 을 수 있 습 니 다.그 중에서 rid 는 B 역 의 작은 분류 이 고 pn 은 페이지 입 니 다.작은 편집 자 는 브 라 우 저 에서 주 소 를 열 어 보 았 지만 404 를 신 고 했 습 니 다.제어 판 에서 이 주소 의 반환 값 은 분명히 비디오 목록 입 니 다.콜백 의 인 자 를 없 애 보 세 요.의외로 원 하 는 결 과 를 얻 었 습 니 다.
bid 는 B 사이트 동 영상의 유일한 ID 로 알려 져 있 습 니 다.bid 를 가 져 오 려 면 위 url 의 반환 값 에서 aid 를 추출 한 다음 에 aid 를 bid 로 변환 할 수 있 습 니 다.
Str = 'fZodR9XQDSUm21yCkr6zBqiveYah8bt4xsWpHnJE7jL5VG3guMTKNPAwcF' #
Dict = {}
# , f 0 Z 1 。
for i in range(58):
Dict[Str[i]] = i
s = [11, 10, 3, 8, 4, 6, 2, 9, 5, 7] #
xor = 177451812
add = 100618342136696320 #
def algorithm_enc(av):
ret = av
av = int(av)
av = (av ^ xor) + add
# BV (BV + 10 )
r = list('BV ')
for i in range(10):
r[s[i]] = Str[av // 58 ** i % 58]
return ''.join(r)
def find_bid(p):
bids = []
r = requests.get(
'https://api.bilibili.com/x/web-interface/newlist?&rid=20&type=0&pn={}&ps=50&jsonp=jsonp'.format(p))
data = json.loads(r.text)
archives = data['data']['archives']
for item in archives:
aid = item['aid']
bid = algorithm_enc(aid)
bids.append(bid)
return bids
2.동 영상 을 가 져 오 는 CID1080 동 영상 을 다운로드 하려 면 bid 만 으로 는 부족 하 며,로그 인 후 Cookie 의 SESSDATA 값 과 cid 가 필요 합 니 다.
우선 B 사이트 에 로그 인하 여 쿠키 에 있 는 SESSDATA 를 대상 머리 에 복사 합 니 다.주소
https://api.bilibili.com/x/player/pagelist?bvid=
url 로 cid 를 되 돌려 줍 니 다.
def get_cid(bid):
url = 'https://api.bilibili.com/x/player/pagelist?bvid=' + bid
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
'Cookie': 'SESSDATA=182cd036%2C1636985829%2C3b393%2A51',
'Host': 'api.bilibili.com'
}
html = requests.get(url, headers=headers).json()
infos = []
data = html['data']
cid_list = data
for item in cid_list:
cid = item['cid']
title = item['part']
infos.append({'bid': bid, 'cid': cid, 'title': title})
return infos
3.동 영상 다운로드동 영상 다운로드
https://api.bilibili.com/x/player/playurl
는 동 영상 이 재생 될 때마다 추천 목록 에서 나온다.마지막 으로 urllib.request.url retrieve 함 수 를 사용 하여 동 영상 을 다운로드 합 니 다.
def get_video_list(aid, cid, quality):
url_api = 'https://api.bilibili.com/x/player/playurl?cid={}&bvid={}&qn={}'.format(cid, aid, quality)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
'Cookie': 'SESSDATA=182cd036%2C1636985829%2C3b393%2A51',
'Host': 'api.bilibili.com'
}
html = requests.get(url_api, headers=headers).json()
video_list = []
for i in html['data']['durl']:
video_list.append(i['url'])
return video_list
def schedule_cmd(blocknum, blocksize, totalsize):
percent = 100.0 * blocknum * blocksize/ totalsize
s = ('#' * round(percent)).ljust(100, '-')
sys.stdout.write('%.2f%%' % percent + '[' + s + ']' + '\r')
sys.stdout.flush()
def download(video_list, title, bid):
for i in video_list:
opener = urllib.request.build_opener()
opener.addheaders = [
('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36'),
('Accept', '*/*'),
('Accept-Language', 'en-US,en;q=0.5'),
('Accept-Encoding', 'gzip, deflate, br'),
('Range', 'bytes=0-'),
('Referer', 'https://www.bilibili.com/video/'+bid),
('Origin', 'https://www.bilibili.com'),
('Connection', 'keep-alive'),
]
filename=os.path.join('D:\\video', r'{}_{}.mp4'.format(bid,title))
try:
urllib.request.install_opener(opener)
urllib.request.urlretrieve(url=i, filename=filename, reporthook=schedule_cmd)
except:
print(bid + " , :" + filename)
파 이 썬 스 크 립 트 를 써 서 삐 리 삐 리 댄스 구역 의 모든 동 영상 을 다운로드 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python 다운로드 삐 리 삐 리 동 영상 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.