Python 스 크 립 트 를 써 서 삐 리 삐 리 댄스 구역 의 모든 동 영상 을 다운로드 하 세 요.

캡 처 목록
우선 댄스 구역 을 열 고 택 무 목록 을 선택 하 세 요.

그리고 F12 제어 판 을 열 면https://api.bilibili.com/x/web-interface/newlist?rid=20&type=0&pn=1&ps=20&jsonp=jsonp&callback=jsonCallback_bili_57905715749828263url 을 찾 을 수 있 습 니 다.그 중에서 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.동 영상 을 가 져 오 는 CID
1080 동 영상 을 다운로드 하려 면 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 다운로드 삐 리 삐 리 동 영상 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기