筆者將在7月27日舉辦一個讀者見面暨新書發表交流會,活動由旗標出版社主辦、台北天瓏書局提供場地,地點在台北市中正區重慶南路一段105號2樓。報名網址:https://tenlong.kktix.cc/events/f9796
這場交流會內容包含:
聊聊Arduino,看看這個開源微控制板、程式語言和開發工具,如何翻轉了創客(Maker)手作和教育。除了Arduino官方的控制板以及程式編輯工具,還有哪些選擇?
聊聊物聯網、Python和MicroPython…如果用Blynk、拖拉Scratch程式積木就能完成作品,何苦打字學程式語言?Python有哪些吸引創客的特點?
本次讀者交流會的活動場地和收費都由天瓏書局規劃,收益也全部歸天瓏書局。
您好,
我在讀本書時,操作到pytube那邊卡關了。page:5-8
就是當我打到yt.title時,出現keyError。
>>> from pytube import YouTube
>>> yt=YouTube(‘https://www.youtube.com/watch?v=5OV5RaU5U28’)
>>> yt.title()
Traceback (most recent call last):
File “”, line 1, in
File “C:\Users\user\AppData\Roaming\Python\Python37\site-packages\pytube\__main__.py”, line 254, in title
return self.player_config_args[‘title’]
KeyError: ‘title’
>>>
請問是哪裡出問題?
—
另外,您的書寫的非常的好。
抱歉造成您的困擾,我剛剛更新pytube程式庫,也出現同樣的錯誤。
後來發現是pytube程式的bug,根據pytube專案的guthub的這個提交修正,
需要修改__main__.py和streams.py這兩個檔案的程式碼,例如,
__main__.py裡的這一行:
要改成:
我已經修改好並測試成功,請按此連結下載。
下載之後,將它解壓縮到你的電腦的pytube安裝路徑,覆蓋原有的__main__.py和streams.py。
pytube的預設安裝路徑是:
C:\Program Files\Python37\Lib\site-packages\pytube
thanks,
jeffrey
赵老师您好,
这个“7月27日讀者交流會”有视频在网上看吗 ?
不好意思,现场没有摄影。
thanks,
jeffrey
感謝您。可以動了。
我才剛學python,昨天有看到他指的地方,只是不知道怎麼改。
接下來我可以繼續下去了。
謝謝
不客氣,感謝告知!
thanks,
jeffrey
您好,我又來了。
第一點,在 run stream = yt.streams.filter(type=’video’)[0] 這一段時,出現
stream = yt.streams.filter(type=’video’)[0]
TypeError: ‘StreamQuery’ object is not subscriptable 。
似乎[0] <==沒辦法work.
.first()
.all() 都可以動。
第二點,另外,在抓youtobe時,會有禁止爬蟲(是這樣說的吧?)的錯誤出現
urllib.error.HTTPError: HTTP Error 403: Forbidden
1. 拍謝,filter()方法傳回的資料類型是’StreamQuery’,all()傳回的才是列表。所以要改寫成:
yt.streams.filter(type=’video’).all()[0]
2. 剛剛測試書本的tube.py檔下載沒問題:
python tube.py -a https://youtu.be/siQJhIp-UTU
thanks,
jeffrey
第一個可以了,感謝。
關於error 403的問題,我剛剛爬了網,這裡有說怎麼改,我就照著改,幾個被鎖的都可以下載了。
https://github.com/nficano/pytube/issues/399
有的可以不用改,我就可以下載成功,有的要照著改,看起來這個問題很新,裡面的回答也是最近的。
我改好了,但是我不知道為什麼~~~~~xd
這也太巧了,我挑選的影片下載都沒問題。我會再整理範例檔,下週一請出版社更新,非常感謝!
thanks,
jeffrey
from pytube import YouTube
yt = YouTube(“https://www.youtube.com/watch?v=zMNC2cw1D7k”)
stream = yt.streams.filter(resolution=”720p”).first()
stream.download()
以上是程式碼@@
不知道為什麼會出現錯誤
錯誤訊息如下
Traceback (most recent call last):
File “C:\Users\USER\Desktop\123.py”, line 9, in
stream.download()
File “C:\Users\USER\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pytube\streams.py”, line 206, in download
filename = filename or self.default_filename
File “C:\Users\USER\AppData\Local\Programs\Python\Python37-32\lib\site-packages\pytube\streams.py”, line 176, in default_filename
title = self.player_config_args[‘title’]
KeyError: ‘title’
造成pyTube程式出錯的部份原因應該是YouTube內部程式持續做了一些修改,導致之前的驗證規則不再適用。
根據這一篇回應提到的修正,我改好了mixins.py和cipher.py,請重新下載pytube9.5.1_fixed.zip檔並閱讀裡面的「說明」,覆蓋site-packages\pytube路徑裡的同名檔案。
在macOS系統上,請執行”python3 -m site”命令確認site-packages路徑。
剛剛測試下載沒問題:
thanks,
jeffrey
續前面error403。
這幾天在上別的課,有機會用到抓youtube影片,我發現,
把所有影片規格通通列出來,並不是每一個規格都可以下載,即使照我上次說的修改,還是有部份規格會出現error403。
例如,1080p fail , 740p pass. 很特別。
。
我很少遇到403錯誤的情況,倒是YouTube採用稱為DASH(Dynamic Adaptive Streaming over HTTP,基於HTTP的動態自適性串流)技術,某些高品質串流內容只有視訊或聲音,所以要分開下載視訊和聲音,再透過ffmpeg將兩者合併成一個影音檔。
早期的YouTube視訊在一個影音檔裡面同時包含視訊和聲音,稱為progressive download(漸進式下載)視訊檔,僅限於720p或更低畫質的視訊。
相關說明請參閱PyTube官方說明文件的DASH vs Progressive Streams單元。
thanks,
jeffrey