Python 使用youtube dl的子流程自动下载歌曲列表

Python 使用youtube dl的子流程自动下载歌曲列表,python,json,youtube,subprocess,youtube-dl,Python,Json,Youtube,Subprocess,Youtube Dl,从下面的代码中,我想从谷歌搜索引擎中查询每一行包含歌曲名称(一行来自“playlist.txt”文件),然后根据我获取youtube链接并使用youtube dl的结果,提取音频 当我运行结果所包含的链接时,谷歌阻止了我的计算机系统的异常流量。有什么方法来反驳吗 我用睡眠来保持两次请求之间的时间间隔 我想知道如何纠正这个错误 我认为更改用户代理或使用代理可能有助于避免自动搜索检测。因此,我想知道如何更改代码以实现这一点 import urllib import json as m_json im

从下面的代码中,我想从谷歌搜索引擎中查询每一行包含歌曲名称(一行来自“playlist.txt”文件),然后根据我获取youtube链接并使用youtube dl的结果,提取音频

当我运行结果所包含的链接时,谷歌阻止了我的计算机系统的异常流量。有什么方法来反驳吗

我用睡眠来保持两次请求之间的时间间隔

我想知道如何纠正这个错误

我认为更改用户代理或使用代理可能有助于避免自动搜索检测。因此,我想知道如何更改代码以实现这一点

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')
下载黑色安息日铁人-YouTube
http://www.youtube.com/watch?v=rT4KpfiFcNc
[youtube]rT4KpfiFcNc:下载网页
[youtube]rT4KpfiFcNc:提取视频信息
[youtube]rT4KpfiFcNc:下载仪表盘清单
错误:输出模板中出错:索引73处不支持的格式字符“(”(0x28)(编码:“UTF-8”)

您的
url
格式不正确。如果仔细查看,您有:

http://www.youtube.com/watch%3Fv%3DrT4KpfiFcNc
但正确的Youtube URL格式是:

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

运行此操作时,您的终端输出是什么?@Lawrence我添加了它!每首歌曲(或每行)的输出相同从这个文件中,我知道您正试图通过python实现这一点,但仅供参考,您可以通过一个youtube dl命令行,使用
gvsearch
--匹配标题
,和
--拒绝标题
选项来完成所有操作。这很有效,但我遇到了一个新错误。下载Black Sabbath Iron Man-youtube[youtube]rT4KpfiFcNc:下载网页[youtube]rT4KpfiFcNc:提取视频信息[youtube]rT4KpfiFcNc:下载仪表盘清单错误:输出模板中错误:索引73处不支持的格式字符“(”(0x28)(编码:“UTF-8”)1解码后,如果我使用该链接从终端使用youtube dl下载,效果很好!但不是通过脚本,请更新您的问题并包括新的终端输出,完成。我是本论坛的新手!感谢ua建议@Lawrence如何随机列出用户代理和代理服务器,以避免自动搜索hes检测