2013-07-07 1 views
0

Я использую запросов модуль для питона и отправки запроса GET на сайт следующим образом:Как ввести параметр для запроса HTTP GET, у которого нет имени?

r = requests.get("https://www.youtube.com", params={"search_query":"Hello World"}).text 

Который только возвращает HTML страницы на YouTube, который ищет «Hello World», который является параметром для поля с именем «search_query».

Однако предположим, что один параметр, который я хочу ввести, не имеет имени на сайте, но все еще является частью формы.

На сайте я говорю, имеет следующий код:

<input type="text" id="youtube-url" value="http://www.youtube.com/watch?v=KMU0tzLwhBE" onclick="sALL(this)" autocomplete="off" style="width:466px;"> 

Как бы я идти об отправке параметров на этот конкретный вклад, считая, что не имеет названия?

Благодаря

EDIT: Полный HTML кода:

enter image description here

+0

Если вход не имеет имени, он не отправляется с формой. Что делает javascript? Может быть, он использует 'id' как имена? –

+0

Я не очень разбираюсь в Javascript, но не похоже, что он использует идентификаторы как имена на основе HTML-кода сайта (http://www.youtube-mp3.org/) – Cisplatin

+1

Отправить форму и посмотреть, что произойдет на вкладке «Сеть» инспектора вы можете точно видеть, что и как отправляется. –

ответ

1

Этот сайт не делает любой нормальный Посылаем, все это делается с помощью JavaScript. При нажатии на кнопку запрос GET отправляется так:

"https://stackoverflow.com/a/pushItem/?item=" + escape(g("youtube-url").value) 
    + "&el=na&bf=" + getBF() 
    + "&r="+ (new Date()).getTime(); 

Тогда в результате этого, другой отправляется:

"https://stackoverflow.com/a/itemInfo/?video_id=" + video_id + "&ac=www&t=grp&r=" + a.getTime(); 

Так питона вы можете попробовать это:

import time 

videoid = requests.get("http://www.youtube-mp3.org/a/pushItem/", 
       params={ 
         "item": "your youtube video url", 
         "el": "na", 
         "bf": "false", 
         "r": int(time.time() * 1000000) # JS timestamps are in microseconds 
       }).text 


info = requests.get("http://www.youtube-mp3.org/a/itemInfo/", 
        params={ 
         "video_id": videoid, 
         "ac": "www", 
         "t": "grp", 
         "r": int(time.time() * 1000000) 
        }).text 

И тогда вам придется разобрать info, что даже не JSON, а больше javascript и делать все, что вы хотите, с этими данными.

Возможно, вам придется иметь дело с CAPTCHA или конверсией.

+0

Только один вопрос: что вы подразумеваете под «parse the info» – Cisplatin

+0

Вы получите строку например: 'info = {" title ":« Разработчики »,« образ »:« http://i.ytimg.com/vi/KMU0tzLwhbE/default.jpg »,« length »:« 3 »,« status » : "serve", "progress_speed": "", "progress": "", "ads": "", "pf": "", "h": "b89796b7f81990b00f3352c80227f6cb"}; ', вам придется извлечь полезную информацию от него. –

+0

Главным образом бит 'h'. Ссылка для загрузки построена с идентификатором видео, который вы получили раньше, и этим 'h'. –

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