2013-07-07 37 views
0

我使用請求模塊蟒蛇,併發送一個GET請求到站點如下:如何爲沒有名稱的HTTP GET請求輸入參數?

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

剛剛返回,搜索的「Hello World」在YouTube頁面的HTML,這是名稱爲「search_query」的字段的參數。

但是,假設我想輸入的一個參數在網站上沒有名稱,但仍然是表單的一部分。

我說的是具有下面的代碼的網站:

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

我怎麼會去發送一個參數這個特定的輸入,認爲它沒有一個名字嗎?

感謝

編輯:代碼的完整的HTML:

enter image description here

+0

如果輸入沒有名稱,則不會隨窗體一起提交。 JavaScript是做什麼的?也許它使用'id's作爲名字? –

+0

我不太瞭解Javascript,但它看起來並不像它使用ID作爲基於網站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(); 

所以在Python中,你可以試試這個:

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

只有一個問題:你是什麼意思的「解析信息」 – Cisplatin

+0

你會得到一個字符串像這樣:'info = {「title」:「Developers」,「image」:「http://i.ytimg.com/vi/KMU0tzLwhbE/default.jpg」,「length」:「3」,「status」 :「serving」,「progress_speed」:「」,「progress」:「」,「ads」:「」,「pf」:「」,「h」:「b89796b7f81990b00f3352c80227f6cb」來自它的有用信息。 –

+0

主要是'h'位。下載鏈接是用你之前獲得的視頻ID和'h'構建的。 –