python-从youtube下载mp3

时间:2016-05-14 19:54:04

标签: python youtube beautifulsoup

我正试图通过Python在youtube上的视频列表中下载mp3: 到目前为止,我有:

from bs4 import BeautifulSoup
import urllib2

url='https://www.youtube.com/playlist?list=PLYjSYQBFeM-zQeZFpWeZ_4tnhc3GQWNj8'

page=urllib2.urlopen(url)
soup = BeautifulSoup(page.read())
todos=soup.findAll("a",{'class':'yt-uix-sessionlink'})
for todo in todos:
            if  len(str(todo.get('href'))) > 1 and 'index' in todo.get('href'):
                dir='https://www.youtube.com' 
                texto=str(todo.get('href'))
                final=texto.find("&list") 
                subtexto=dir+texto[0: final]
                a.append(subtexto)

lista=set(a) 

所以我有了视频列表。我去了网址将它们转换为mp3

url2='http://www.youtube-mp3.org/'

发现我必须在'form'标签中粘贴每一个:

page2=urllib2.urlopen(url2)
soup2 = BeautifulSoup(page2.read())

formu=soup2.find('div', attrs={'id':'form'}).find('input')

如果我打印formu,我得到:

<input autocomplete="off" id="youtube-url" onclick="sAll(this)" type="text" value="http://www.youtube.com/watch?v=KMU0tzLwhbE"/>

我认为这些图书馆可能有所帮助:

import requests
import lxml.html as lh

所以我试过了:

form_data={'input':lista[1]}
response = requests.post(url2, data=form_data)

但是我必须发送'ENTER'键并按下'转换视频'按钮。你能告诉我如何做到这一点吗?

1 个答案:

答案 0 :(得分:0)

单击网页上按钮的绝对最佳方法是使用Web驱动程序,如Selenium。 但是,您可以通过调用与单击该按钮时调用的相同调用来模拟单击提交按钮。

对于youtube-mp3,我看到它是一个XMLHTTPRequest,一个get请求。

http://www.youtube-mp3.org/a/pushItem/?item=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DuO59tfQ2TbA&r=1476878990281&s=33319

有两个参数我不明白。 r和s。但我发现,如果我们不改变它们,那么查询就可以了。我们可以将项目值更改为我们想要的任何内容,它将使用videoid返回给我们。

r = requests.get("http://www.youtube-mp3.org/a/pushItem/?item=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DuO59tfQ2TbA&r=1476878990281&s=33319")
print r.text

这会给你一个视频ID。在下次通话中使用此视频ID

http://www.youtube-mp3.org/a/itemInfo/?video_id=uO59tfQ2TbA&ac=www&t=grp&r=1476878991758&s=156841

这将返回一个json。使用此JSON获取文件。

http://www.youtube-mp3.org/get?video_id=srjPtc7ykiw&ts_create=1476878991&r=MTAuMTA3LjQ3LjI%3D&h2=c9ceec7efc6c61251ce671b5d63cd4c0&s=3278