2016-05-14 2 views
0

Я пытаюсь downaload mp3 из списка видео, которые я имею в YouTube с Python: До сих пор у меня есть:python- скачать mp3 из YouTube

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) 

Так что я получил список видео , Я пошел в URL, чтобы преобразовать их в mp3

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

и обнаружил, что я должен вставить каждый в «форме» тег:

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» клавиш и нажмите кнопку «Конвертировать видео». Можете ли вы дать мне понять, как это сделать?

+0

Я не знаю, если вы знаете об этом, но большинство, если не все видео на YouTube доступны в аудио-формате. – spectras

+0

нормально, но в любом случае я хочу использовать списки, которые у меня уже есть. – GabyLP

+0

Вот что я имел в виду: когда вы загружаете видео, например, с помощью 'youtube-dl', вы можете просто сказать, что хотите его в формате только аудио. Для этого нет необходимости проходить через сторонний веб-сайт. – spectras

ответ

0

Абсолютным лучшим способом щелкнуть по кнопке на веб-странице является использование webdriver, например Selenium. Однако вы можете имитировать нажатие кнопки отправки, вызывая тот же вызов, который был бы вызван нажатием этой кнопки.

В случае youtube-mp3, я увидел, что это был запрос XMLHTTPRequest, запрос на получение.

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

Есть два параметра, которые я не понимаю. R и s. Но я обнаружил, что если мы не изменим их, запрос будет работать. Мы можем изменить значение элемента на все, что захотим, и оно вернет нам видеоид.

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 

Это даст вам идентификатор видео. Используйте этот идентификатор видео при следующем вызове

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

Смежные вопросы