由于近期Youtube做了一次網(wǎng)站結(jié)構(gòu)改版,導(dǎo)致了一系列解析Youtube的開源軟件功能異常,我最常用的Pytube也是其中一員外永,目前能看到的不兼容有:
* Channel中的videos和video_urls都返回空列表,具體調(diào)用情況:
from pytube import Channel
channel = Channel("https://www.youtube.com/channel/頻道ID")
print(channel.video_urls)
print(channel.videos)
打印結(jié)果:
[]
[]
* Channel中的部分參數(shù)調(diào)用報(bào)錯,具體調(diào)用情況:
#頻道主的用戶名
owner_name = channel.owner
#頻道內(nèi)的視頻總數(shù)
video_total = channel.length
#播放總數(shù)
views_total = channel.views
打印結(jié)果:
Traceback (most recent call last):
File "~/channel_scan.py", line 5, in <module>
print(channel.views)
File "/Users/yeyu/opt/anaconda3/lib/python3.9/site-packages/pytube/contrib/playlist.py", line 379, in views
views_text = self.sidebar_info[0]['playlistSidebarPrimaryInfoRenderer'][
File "/Users/yeyu/opt/anaconda3/lib/python3.9/site-packages/pytube/contrib/playlist.py", line 93, in sidebar_info
self._sidebar_info = self.initial_data['sidebar'][
KeyError: 'sidebar'
* 不支持新的@格式的頻道URL娜遵,具體調(diào)用情況:
channel = Channel("https://www.youtube.com/@NBAHighlightsYT")
打印結(jié)果:
Traceback (most recent call last):
File "~/channel_scan.py", line 4, in <module>
channel = Channel("https://www.youtube.com/@NBAHighlightsYT")
File "/Users/yeyu/opt/anaconda3/lib/python3.9/site-packages/pytube/contrib/channel.py", line 24, in __init__
self.channel_uri = extract.channel_name(url)
File "/Users/yeyu/opt/anaconda3/lib/python3.9/site-packages/pytube/extract.py", line 185, in channel_name
raise RegexMatchError(
pytube.exceptions.RegexMatchError: channel_name: could not find match for patterns
目前Pytube主干上還未fix這些問題,由于我的項(xiàng)目需要用到Channel中的video列表壤短,所以急需解決第一個問題设拟。靠人不如靠己久脯,通過對pytube轉(zhuǎn)換http后的字典進(jìn)行分析纳胧,發(fā)現(xiàn)自己動手解決起來其實(shí)也很容易。以下是解決方案:
1) 找到channel.py文件
Channel.py文件保存在pytube源碼目錄里帘撰,pytube是一個python包跑慕,由pip管理,因此我們可以直接調(diào)用pip命令得到pip包的路徑骡和,在命令行中輸入:
$ pip -V
在我的MAC里就會打印出pip的路徑:
pip 21.2.4 from /Users/yeyu/opt/anaconda3/lib/python3.9/site-packages/pip (python 3.9)
去掉路徑中最后的“pip”相赁,改成“pytube/contrib/channel.py”,“/Users/yeyu/opt/anaconda3/lib/python3.9/site-packages/pytube/contrib/channel.py”就是channel.py的位置慰于。
2) 修改channel.py文件
第一個修改點(diǎn):
154行-156行
第二個修改點(diǎn):
194行
改完保存channel.py钮科,接下來嘗試調(diào)用:
from pytube import Channel
channel = Channel("https://www.youtube.com/channel/頻道ID")
print(channel.video_urls)
print(channel.videos)
就沒有問題了。