2011-11-10 55 views
0

我試圖使用Python在基於ajax的網站(如www.snapbird.org)上檢索查詢結果。由於它不顯示在頁面源中,我不知道如何繼續。 我是一個Python新手,因此如果我能夠在正確的方向得到一個指針,那將是非常好的。 如果這更容易,我也願意接受其他一些處理任務的方法使用Python從基於AJAX的站點提取信息

回答

0

這將會很複雜,但作爲開始,請找到在處理AJAX請求時調用的URL。你可以直接在Python程序中調用它並解析輸出。

0

您也可以將chrome/firefox配置爲HTTP代理,然後使用代理登錄/提取必要的內容。我使用python代理來修改/保存/記錄基於內容類型或URI的請求/內容。

對於其他項目,我已經寫了特定網站的JavaScript小書籤其輪詢新數據,然後將它發送到我的服務器(通過動態創建兩個表單和iframe,並設置myform.target=myiframe;

其他JavaScript腳本/書籤工具模擬一個用戶與網站進行交互,所以不用每隔幾秒輪詢一次javascript就會自動點擊按鈕和表單提交等等。當然,這些腳本總是非常特定於站點,但它們對我來說非常有用,特別是在遍歷所有腳本時給定搜索的分頁結果。

這裏是一個精簡版的「pag」 (inate)「結果並準備將數據發送到我的服務器(然後使用BeautifulSoup進一步解析它)。特別是這是爲Youtube的發送/收件箱郵件而設計的。

var tables = []; 
function process_and_repeat(){ 
    if(!(inbox && inbox.message_pane_ && inbox.message_pane_.innerHTML)){ 
     alert("We've got no data!"); 
    } 
    if(inbox.message_pane_.innerHTML.indexOf('<table') === 0) 
    { 
     tables.push(inbox.message_pane_.innerHTML); 
     inbox.next_page(); 
     setTimeout("process_and_repeat()",3000); 
    } 
    else{ 
     alert("Fininshed, [" + tables.length + " processed]"); 
     document.write('<form action=http://curl.sente.cc method=POST><textarea name=sent.html>'+escape(tables.join('\n'))+'</textarea><input type=submit></form>') 
    } 
} 

process_and_repeat(); // now we wait and watch as all the paginated pages are viewed :) 

這是一個簡化的例子,沒有任何花哨的iframes/non-essentials,這只是增加了複雜性。

除了Liam的說法,Selenium也是一個很好的工具,它有助於我的各種刮擦需求。如果您願意,我會很樂意幫助您。

0

一個簡單的解決方案可能是使用像Mechanize這樣的瀏覽器。因此,您可以瀏覽網站,關注鏈接,進行搜索以及使用帶有用戶界面的瀏覽器執行的幾乎所有操作。

但對於一個非常sepcific工作,你甚至可能不會需要這樣的庫,你可以使用urlliburllib2 Python庫進行連接,並讀取響應...您可以使用Firebug看到搜索的數據結構和應對機構。然後用urllib做出相關參數的請求...

舉一個例子...

我與joyvalencia搜索和檢查請求的URL與螢火蟲看到:

http://api.twitter.com/1/statuses/user_timeline.json?screen_name=joyvalencia&count=100&page=2&include_rts=true&callback=twitterlib17083330 

所以調用此URL以urllib2.urlopen()將與製作上Snapbird查詢相同。響應體是:

twitterlib17083330([{"id_str":"131548107799396357","place":null,"geo":null,"in_reply_to_user_id_str":null,"coordinates":....... 

當您使用urlopen()和讀取響應,上線就是你......然後你就可以使用json庫蟒讀取數據,並將其解析到Python的數據結構...