从以下代码中,我想从谷歌搜索引擎查询包含歌曲名称(文件中的一行" playlist.txt")的每一行,然后根据我正在拍摄的结果youtube链接和使用youtube-dl,我正在提取音频。
当我运行结果所持有的链接时,GOOGLE阻止声称来自我的计算机系统的异常流量。任何方法来反击
我使用睡眠来保持请求之间的时间间隔。
我想知道如何纠正错误
我认为更改用户代理或使用代理可能有助于避免自动搜索检测。所以,我想知道如何更改我的代码以实现该目标
import urllib
import json as m_json
import re
import time
import subprocess
from random import randint
import getpass
playlist=open('playlist.txt','r')
songs = playlist.readlines()
song_num = 1
for song in songs:
query = song
query = urllib.urlencode ( { 'q' : query } )
response = urllib.urlopen ( 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&' + query ).read()
json = m_json.loads ( response )
results = json [ 'responseData' ] [ 'results' ]
for result in results:
title = result['title']
url = result['url']
if re.search(r'www.youtube.com',url):
print ( title + '; ' + url )
print "DOWNLOADING",title
decoded_url=urllib.unquote(url).decode('utf8')
print decoded_url
subprocess.call(['youtube-dl','-o','/home/'+getpass.getuser()+'/Videos/playlist%('+title+").(ext)s","--extract-audio","--audio-format","mp3",decoded_url])
break;
print song_num
time.sleep(randint(10,15))
song_num+=1
输出
DOWNLOADING <b>Black Sabbath Iron Man</b> - YouTube
http://www.youtube.com/watch?v=rT4KpfiFcNc
[youtube] rT4KpfiFcNc: Downloading webpage
[youtube] rT4KpfiFcNc: Extracting video information
[youtube] rT4KpfiFcNc: Downloading DASH manifest
ERROR: Error in output template: unsupported format character '(' (0x28) at index 73 (encoding: 'UTF-8')
答案 0 :(得分:2)
您的url
格式不正确。仔细观察,你有:
http://www.youtube.com/watch%3Fv%3DrT4KpfiFcNc
但正确的Youtube网址格式为:
https://www.youtube.com/watch?v=rT4KpfiFcNc
在调用youtube-dl
之前,您应该尝试解码URL。像这样:
url=urllib.unquote(result['url']).decode('utf8')
此外,您的输出格式无效;你只想
'-o', '~/Videos/playlist%(title)s.(ext)s"
%('+title+").
正在尝试使用youtube-dl查找以标题命名的属性,并在s
之后启动,错过)
。