我試圖使用Python在基於ajax的網站(如www.snapbird.org)上檢索查詢結果。由於它不顯示在頁面源中,我不知道如何繼續。 我是一個Python新手,因此如果我能夠在正確的方向得到一個指針,那將是非常好的。 如果這更容易,我也願意接受其他一些處理任務的方法使用Python從基於AJAX的站點提取信息
回答
這將會很複雜,但作爲開始,請找到在處理AJAX請求時調用的URL。你可以直接在Python程序中調用它並解析輸出。
您可以使用Selenium的Python client driver來解析頁面源代碼。我通常將這個與PyQuery結合使用,以使網頁抓取更容易。
這是basic tutorial for Selenium's Python driver。請務必遵循Selenium版本而不是版本1的說明(除非由於某種原因使用版本1)。
您也可以將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也是一個很好的工具,它有助於我的各種刮擦需求。如果您願意,我會很樂意幫助您。
一個簡單的解決方案可能是使用像Mechanize這樣的瀏覽器。因此,您可以瀏覽網站,關注鏈接,進行搜索以及使用帶有用戶界面的瀏覽器執行的幾乎所有操作。
但對於一個非常sepcific工作,你甚至可能不會需要這樣的庫,你可以使用urllib
和urllib2
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的數據結構...
- 1. 使用python從網站獲取信息
- 2. 從網站提取信息
- 3. 提取從網站使用BeautifulSoup(Python)的具體信息
- 4. 使用Python從shapefile中提取信息
- 5. 從外部網站提取信息
- 6. 使用codeigniter從數據庫獲取基本站點信息的最佳方式
- 7. 使用Python提取LinkedIn信息
- 8. 基於其他字段的值從python的json輸入中提取信息
- 9. 如何使用C#從網站中提取確切的信息?
- 10. 使用Selenium Python僅從網站提取所需的詳細信息
- 11. 使用Jsoup從網站獲取信息
- 12. 基於ID的jQuery ajax加載信息
- 13. 從python提取特定信息來源:
- 14. Python - 從數據框提取信息(JSON)
- 15. 查詢從一個表中提取信息基於其他
- 16. 使用jQuery從XML中提取信息
- 17. 使用Mathematica從HTML中提取信息
- 18. 使用DOM從XML中提取信息?
- 19. 使用Powershell從SQL Server提取信息
- 20. 使用Python從推文中提取用戶信息
- 21. 完全基於ajax的站點的htaccess
- 22. 使用Python從SQL表獲取信息
- 23. 使用XPath提取信息
- 24. Azure Python SDK問題 - 從RoleInstance中提取端點信息
- 25. 使用python從網頁中提取信息
- 26. 使用python從url中提取javascript信息
- 27. 如何使用Python從HTML文檔中提取信息?
- 28. 使用Python從SGM文件中提取信息
- 29. 使用從python函數向模板提取信息
- 30. 無法使用python從Linux shell命令提取信息