[問題] pytube RegexMatchError

看板Python作者 (壞貓咪)時間5年前 (2018/11/12 20:33), 5年前編輯推噓0(009)
留言9則, 2人參與, 5年前最新討論串1/1
參照網路上的教學試試用pytube庫下載影片 不過開頭就出問題惹QQ 使用的系統為win7 64位元 IDE為PyCharm 並且連接到Anaconda 3 (python 3.7) Pytube為9.3.51版本 我的Code如下 === from pytube import YouTube link = "https://www.youtube.com/watch?v=Ik-RsDGPI5Y"
yt = YouTube(link) print(yt.get_videos()) print(yt.filename) yt.set_filename('Dancing') print(yt.filter('flv')) print(yt.filter('mp4')[-1]) print(yt.filter(resolution='480p')) video = yt.get('mp4','720p') video.download('E:\\_sublime\\scrapy\\hey\\') === https://imgur.com/g6E1LwR
錯誤如下 === Traceback (most recent call last): File "E:/_sublime/scrapy/hey/venv/ytvideo.py", line 5, in <module> yt = YouTube(link) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pytube\__main__.py", line 88, in __init__ self.prefetch_init() File "C:\Users\Administrator\Anaconda3\lib\site-packages\pytube\__main__.py", line 97, in prefetch_init self.init() File "C:\Users\Administrator\Anaconda3\lib\site-packages\pytube\__main__.py", line 133, in init mixins.apply_signature(self.player_config_args, fmt, self.js) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pytube\mixins.py", line 49, in apply_signature signature = cipher.get_signature(js, stream['s']) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pytube\cipher.py", line 250, in get_signature tplan = get_transform_plan(js) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pytube\cipher.py", line 69, in get_transform_plan name = re.escape(get_initial_function_name(js)) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pytube\cipher.py", line 45, in get_initial_function_name return regex_search(pattern, js, group=1) File "C:\Users\Administrator\Anaconda3\lib\site-packages\pytube\helpers.py", line 41, in regex_search .format(pattern=p), pytube.exceptions.RegexMatchError: regex pattern (yt\.akamaized\.net/\)\s*\|\|\s*.*?\s*c\s*&&\s*d\.set\([^,]+\s*,\s*(?P<sig>[a-zA-Z0-9$]+)\() had zero matches === https://imgur.com/HcRIpye
有在GitHub跟STACK OVERFLOW看到幾個人有類似問題 不過都沒有解答 所以來這邊求助熱心的高手! -- 台北的夏天 應該會有一場雨 我想起自由 和你的氣味 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.156.219 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1542025993.A.F2A.html

11/13 00:32, 5年前 , 1F
把你的 pattern 貼101檢查吧 https://regex101.com/
11/13 00:32, 1F

11/13 00:45, 5年前 , 2F
看了一下那是他寫的 pattern
11/13 00:45, 2F
甚麼東西XD 不懂

11/14 00:58, 5年前 , 3F
應該是 youtube 的資料格式有變,他爬失敗惹
11/14 00:58, 3F

11/14 00:59, 5年前 , 4F
你先跳過他的範例做別的吧@@
11/14 00:59, 4F

11/14 10:53, 5年前 , 5F
pytube ->cipher.py ->get_initial_function_name(js)
11/14 10:53, 5F

11/14 10:55, 5年前 , 6F
pattern= r'\bc\s*&&\s*d\.set\([^,]+\s*,\s*\([^)]*\)
11/14 10:55, 6F

11/14 10:55, 5年前 , 7F
\s*\(\s*(?P<sig>[a-zA-Z0-9$]+)\('
11/14 10:55, 7F

11/14 10:56, 5年前 , 8F
再對cipher.py重新編譯一次
11/14 10:56, 8F

11/14 10:58, 5年前 , 9F
你的Code範例是舊的,很多function都改掉了。
11/14 10:58, 9F
謝謝 解決了! 範例好像是舊的 雖然我看的那篇教學文是2017年5月的.. 不過後來有找到從PiPy網站看pytube library 裡面的function都不太一樣了 幾乎都是加上了一個streams 像是 yt.streams.filter(only_audio=True).all() 這樣 目前可以用python抓youtube影片了 謝謝!!! ※ 編輯: wavek (1.169.156.219), 11/14/2018 21:21:55
文章代碼(AID): #1RwNC9yg (Python)