python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析
前言
最近需要大規(guī)模下載B站視頻,同時(shí)要將下載好的視頻用BV號(hào)進(jìn)行重命名,最后上傳至服務(wù)器。這個(gè)工作一開始我是完全手工完成的,通過游猴來下載,可是下載幾十個(gè)視頻還好,再多一點(diǎn)的話真是太煩了,而且生產(chǎn)力低下,因此誕生了編寫腳本的想法。
一開始我需要在B站搜索關(guān)鍵詞,然后不斷點(diǎn)開視頻后進(jìn)行下載,同時(shí)在視頻下載后還需要找到這個(gè)視頻來修改BV號(hào),效率實(shí)在太低,特別是當(dāng)下載的視頻多了,再返回來尋找它對(duì)應(yīng)的BV號(hào)時(shí)也是個(gè)很繁瑣的過程,因此決定進(jìn)行編寫python腳本。
本次的腳本可以大幅度提高工作效率,但是它并不是全自動(dòng)完成任務(wù)的,畢竟我們用到了Bilibili唧唧。(唧唧真的很好用,其實(shí)也可以完全做成全自動(dòng),但我覺得沒什么必要了,效率已經(jīng)很高啦~)
大家如果還有什么更好的建議歡迎評(píng)論告訴我。
最后,給個(gè)贊吧,親~
概述
簡(jiǎn)要介紹一下工作流程:
(1)通過爬蟲爬取一堆視頻BV號(hào),存放于txt文件中,如下所示:

(2)不斷復(fù)制BV號(hào),唧唧便會(huì)自動(dòng)進(jìn)行下載視頻
(3)通過腳本將下載好的視頻一鍵化改名

正文
爬蟲部分
1.依賴庫
requestsl
xml
2.代碼
相關(guān)講解已在注釋標(biāo)注。
'''
author:Ericam
description: 用于爬取b站視頻鏈接
'''
import requests
import re
from lxml import etree
import time
'''
該函數(shù)用于解析爬取的網(wǎng)頁。
提取出網(wǎng)頁里視頻的url鏈接以及對(duì)應(yīng)的視頻名。
'''
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內(nèi)的BV號(hào)提取出來
'''
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 = []
#需要爬取多少頁,自行進(jìn)行修改,本代碼測(cè)試1~2頁
for i in range(1,3):
url = "https://search.bilibili.com/all?keyword=歪嘴戰(zhàn)神&page={0}".format(i) #修改keyword后的關(guān)鍵字即可
l = getHref(url,i)
for vurl,title in l:
hrefList.append(vurl)
titleList.append(title)
print("第{0}頁爬取結(jié)束".format(i))
time.sleep(2)
print("---------------------------開始截取BV號(hào)-----------------------------")
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("爬取結(jié)束")
3.爬取結(jié)果

唧唧下載視頻
給出唧唧的鏈接,唧唧,很好用的小工具。
我們只需要將剛才爬取好的鏈接放在一邊,不斷復(fù)制BV號(hào),然后唧唧進(jìn)行下載即可。

視頻重命名
唧唧下載好的視頻如下所示:

為什么需要將它們進(jìn)行改名呢,因?yàn)槿绻?dāng)視頻數(shù)量越來越多時(shí),比如幾千幾萬時(shí),通過名字便會(huì)越來越難以管理,同時(shí)也難以進(jìn)行去重,很大概率會(huì)不斷下載重復(fù)的視頻。
在B站,BV號(hào)便是每個(gè)視頻的“身份證”(主鍵),因此用其進(jìn)行視頻命名可以方便日后管理,同時(shí)也方便進(jìn)行去重。
代碼
'''
author:Ericam
description: 用于將下載下來的b站視頻重命名,命名格式為bv號(hào)
'''
import os
import difflib
if __name__ == '__main__':
bvpath = os.path.join("D:/","Coding","python","Python爬蟲")
os.chdir(bvpath)
d = {}
'''
bvdownload.txt里存放bv號(hào)與title名
若之前爬蟲爬取了幾千個(gè),而唧唧只下載了幾百個(gè),便可以將這些已下載的bv和title復(fù)制到
bvdownload.txt中,將已下載的視頻進(jìn)行改名
'''
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()
#開始進(jìn)行模糊匹配
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("重命名完成!")
結(jié)果演示
重命名完成的視頻列表如下:

到此這篇關(guān)于python爬蟲搭配起B(yǎng)ilibili唧唧的流程分析的文章就介紹到這了,更多相關(guān)python爬蟲Bilibili內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python 批量下載bilibili視頻的gui程序
- 利用python 下載bilibili視頻
- python中使用you-get庫批量在線下載bilibili視頻的教程
- Python爬蟲 bilibili視頻彈幕提取過程詳解
- Python爬蟲模擬登陸嗶哩嗶哩(bilibili)并突破點(diǎn)選驗(yàn)證碼功能
- python批量合成bilibili的m4s緩存文件為MP4格式 ver2.5
- Python腳本如何在bilibili中查找彈幕發(fā)送者
- Python破解BiliBili滑塊驗(yàn)證碼的思路詳解(完美避開人機(jī)識(shí)別)
- Python實(shí)現(xiàn)bilibili時(shí)間長(zhǎng)度查詢的示例代碼
- Python爬蟲爬取Bilibili彈幕過程解析
- python破解bilibili滑動(dòng)驗(yàn)證碼登錄功能
- 寫一個(gè)Python腳本自動(dòng)爬取Bilibili小視頻
相關(guān)文章
python 判斷網(wǎng)絡(luò)連通的實(shí)現(xiàn)方法
下面小編就為大家分享一篇python 判斷網(wǎng)絡(luò)連通的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python調(diào)用ctypes使用C函數(shù)printf的方法
這篇文章主要介紹了Python調(diào)用ctypes使用C函數(shù)printf,需要的朋友可以參考下2017-08-08
使用Python實(shí)現(xiàn)PDF頁面設(shè)置操作
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)PDF頁面設(shè)置操作,例如旋轉(zhuǎn)頁面和調(diào)整頁面順序,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-04-04
Python調(diào)用edge-tts實(shí)現(xiàn)在線文字轉(zhuǎn)語音效果
edge-tts是一個(gè) Python 模塊,允許通過Python代碼或命令的方式使用 Microsoft Edge 的在線文本轉(zhuǎn)語音服務(wù),這篇文章主要介紹了Python調(diào)用edge-tts實(shí)現(xiàn)在線文字轉(zhuǎn)語音效果,需要的朋友可以參考下2024-03-03
python使用pika庫調(diào)用rabbitmq交換機(jī)模式詳解
這篇文章主要介紹了python使用pika庫調(diào)用rabbitmq交換機(jī)模式詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-08-08
解決ToPILImage時(shí)出現(xiàn)維度報(bào)錯(cuò)問題pic should be 2/3 d
這篇文章主要介紹了解決ToPILImage時(shí)出現(xiàn)維度報(bào)錯(cuò)問題pic should be 2/3 dimensional. Got 4 dimensions.具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
Python替換字符串replace()函數(shù)使用方法詳解
Python中的replace()方法是把字符串中的old(舊字符串)替換成new(新字符串),如果指定第三個(gè)參數(shù)max,則替換次數(shù)不超過max次(將舊的字符串用心的字符串替換不超過max次,本文就給大家講講Python replace()函數(shù)的使用方法,需要的朋友可以參考下2023-07-07
Python運(yùn)維自動(dòng)化psutil模塊的監(jiān)控和管理深入探究
這篇文章主要為大家介紹了Python運(yùn)維自動(dòng)化psutil模塊的監(jiān)控和管理深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

