python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析
前言
最近需要大規(guī)模下載B站視頻,同時要將下載好的視頻用BV號進行重命名,最后上傳至服務器。這個工作一開始我是完全手工完成的,通過游猴來下載,可是下載幾十個視頻還好,再多一點的話真是太煩了,而且生產(chǎn)力低下,因此誕生了編寫腳本的想法。
一開始我需要在B站搜索關鍵詞,然后不斷點開視頻后進行下載,同時在視頻下載后還需要找到這個視頻來修改BV號,效率實在太低,特別是當下載的視頻多了,再返回來尋找它對應的BV號時也是個很繁瑣的過程,因此決定進行編寫python腳本。
本次的腳本可以大幅度提高工作效率,但是它并不是全自動完成任務的,畢竟我們用到了Bilibili唧唧。(唧唧真的很好用,其實也可以完全做成全自動,但我覺得沒什么必要了,效率已經(jīng)很高啦~)
大家如果還有什么更好的建議歡迎評論告訴我。
最后,給個贊吧,親~
概述
簡要介紹一下工作流程:
(1)通過爬蟲爬取一堆視頻BV號,存放于txt文件中,如下所示:
(2)不斷復制BV號,唧唧便會自動進行下載視頻
(3)通過腳本將下載好的視頻一鍵化改名
正文
爬蟲部分
1.依賴庫
requestsl
xml
2.代碼
相關講解已在注釋標注。
''' author:Ericam description: 用于爬取b站視頻鏈接 ''' import requests import re from lxml import etree import time ''' 該函數(shù)用于解析爬取的網(wǎng)頁。 提取出網(wǎng)頁里視頻的url鏈接以及對應的視頻名。 ''' def getHref(url,page): try: req = requests.get(url,timeout=5,headers=headers) html = req.text data = etree.HTML(html) ''' page-1://*[@id="all-list"]/div[1]/div[2]/ul[@class="video-list"]/li other://*[@id="all-list"]/div[1]/ul[@class="video-list"]/li ''' pattern = '//*[@id="all-list"]/div[1]/div[2]/ul[contains(@class,"video-list")]/li' if page == 1 else '//*[@id="all-list"]/div[1]/ul[contains(@class,"video-list")]/li' vurlList = data.xpath(pattern) for li in vurlList: vurl = li.xpath(".//a/attribute::href")[0] title = li.xpath(".//a/attribute::title")[0] yield vurl,title except: print('第%d頁爬取失敗' % page) print('Unfortunitely -- An Unknow Error Happened, Please wait 3 seconds') time.sleep(3) ''' 該函數(shù)用于正則提取,將url內的BV號提取出來 ''' def getBv(href): pattern = re.compile('(BV.*?)\?') data = re.search(pattern,href) if data == None: return '' return data.group(1) if __name__ == "__main__": #頭部偽裝 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE' } hrefList = [] titleList = [] #需要爬取多少頁,自行進行修改,本代碼測試1~2頁 for i in range(1,3): url = "https://search.bilibili.com/all?keyword=歪嘴戰(zhàn)神&page={0}".format(i) #修改keyword后的關鍵字即可 l = getHref(url,i) for vurl,title in l: hrefList.append(vurl) titleList.append(title) print("第{0}頁爬取結束".format(i)) time.sleep(2) print("---------------------------開始截取BV號-----------------------------") for i in range(len(hrefList)): hrefList[i] = getBv(hrefList[i]) with open("bv.txt",'w',encoding='utf-8') as f: for i in range(len(hrefList)): f.write(hrefList[i]+"\t"+titleList[i]+"\n") print("爬取結束")
3.爬取結果
唧唧下載視頻
給出唧唧的鏈接,唧唧,很好用的小工具。
我們只需要將剛才爬取好的鏈接放在一邊,不斷復制BV號,然后唧唧進行下載即可。
視頻重命名
唧唧下載好的視頻如下所示:
為什么需要將它們進行改名呢,因為如果當視頻數(shù)量越來越多時,比如幾千幾萬時,通過名字便會越來越難以管理,同時也難以進行去重,很大概率會不斷下載重復的視頻。
在B站,BV號便是每個視頻的“身份證”(主鍵),因此用其進行視頻命名可以方便日后管理,同時也方便進行去重。
代碼
''' author:Ericam description: 用于將下載下來的b站視頻重命名,命名格式為bv號 ''' import os import difflib if __name__ == '__main__': bvpath = os.path.join("D:/","Coding","python","Python爬蟲") os.chdir(bvpath) d = {} ''' bvdownload.txt里存放bv號與title名 若之前爬蟲爬取了幾千個,而唧唧只下載了幾百個,便可以將這些已下載的bv和title復制到 bvdownload.txt中,將已下載的視頻進行改名 ''' with open("bvdownload.txt",'r',encoding='utf-8')as f: lines = f.readlines() for val in lines: val = val.strip("\n") data = val.split("\t") bv = data[0] title = data[1] d[title] = bv #視頻存放位置 path = 'F:/bilibili視頻/' os.chdir(path) videoList = os.listdir() #開始進行模糊匹配 for key in d: video = difflib.get_close_matches(key,videoList,1, cutoff=0.3) if len(video) == 0: continue video = video[0] #檢查視頻是否已存在,若存在則刪除視頻 if os.path.isfile(d[key]+".mp4") and os.path.isfile(video): os.remove(video) else: if os.path.isfile(video): os.rename(video,d[key]+".mp4") print("重命名完成!")
結果演示
重命名完成的視頻列表如下:
到此這篇關于python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析的文章就介紹到這了,更多相關python爬蟲Bilibili內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- python 批量下載bilibili視頻的gui程序
- 利用python 下載bilibili視頻
- python中使用you-get庫批量在線下載bilibili視頻的教程
- Python爬蟲 bilibili視頻彈幕提取過程詳解
- Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點選驗證碼功能
- python批量合成bilibili的m4s緩存文件為MP4格式 ver2.5
- Python腳本如何在bilibili中查找彈幕發(fā)送者
- Python破解BiliBili滑塊驗證碼的思路詳解(完美避開人機識別)
- Python實現(xiàn)bilibili時間長度查詢的示例代碼
- Python爬蟲爬取Bilibili彈幕過程解析
- python破解bilibili滑動驗證碼登錄功能
- 寫一個Python腳本自動爬取Bilibili小視頻
相關文章
python matplotlib.pyplot.plot()參數(shù)用法
這篇文章主要介紹了python matplotlib.pyplot.plot()參數(shù)用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python使用matplotlib實現(xiàn)繪制自定義圖形功能示例
這篇文章主要介紹了Python使用matplotlib實現(xiàn)繪制自定義圖形功能,結合實例形式分析了Python基于matplotlib模塊實現(xiàn)自定義圖形繪制相關操作技巧,需要的朋友可以參考下2018-01-01pytorch方法測試——激活函數(shù)(ReLU)詳解
今天小編就為大家分享一篇pytorch方法測試——激活函數(shù)(ReLU)詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01