2014-09-21 93 views
0

我想連接一個似乎在Ajax中的網站。我想要獲取的html頁面與着陸頁的URL相同,只是登錄後纔會更改。 這裏是我的代碼:Python:使用請求登錄到ajax網站

URL = 'http://www.pogdesign.co.uk/cat/' 
payload = {' password': 'password', ' sub_login': 'Account Login', 'username': 'email'} 

with requests.Session() as s: 
    s.post(URL, data=payload) 
    sock = urllib.urlopen(URL) 
    psource = sock.read() 

頁我得到的是「不是在登錄頁」。我懷疑我可能已經忘記了關於標題的一些東西,或者這不是ajax的工作原理。

感謝您的幫助!

Anton

+0

您確定'requests.Session()。post()'有效嗎?我認爲這只是'requests.post' – karthikr 2014-09-21 22:50:52

+0

它似乎正在工作,因爲我的腳本讓我返回一個HTML頁面,只是不是登錄的。 – Anton 2014-09-22 12:09:28

回答

0

你可以發佈您的登錄與session.post但隨後試圖讀取頁面登錄與urlliburllib沒有關於您的登錄數據(例如會話cookie)的任何信息,除非您明確提供它。當你發佈時,你沒有捕獲到迴應。即使您不需要,也可以繼續使用會話再次請求登錄頁面。

response = s.post(URL, data=payload) 
# response holds the HTTP status, cookie data and possibly the "logged in page" html. 
# check `response.text` if that's the case. if it's only the authentication cookie... 
logged_in_page = s.get(URL) 

當你使用同一個會話做s.get(),登錄時,你有餅乾重新發送後續請求。因爲它是AJAX,您需要檢查時,通過瀏覽器完成正在發送哪些額外的數據,標題或餅乾(以及它是否是getpost檢索後續頁。)

對於登錄post()登錄數據可以作爲params發送,張貼dataheaders。檢查您的瀏覽器正在發生哪種情況(使用開發工具 - > Firefox或Chrome中的「網絡」)。

此外,不要在會話中使用with上下文,因爲只要退出該代碼塊,它就會結束會話。您可能希望您的會話s持續時間長於登錄,因爲它正在管理您的Cookie等。

+0

感謝您的回答。我以前使用過.get,但它不起作用。以下是帖子中的螢火蟲信息:http://hpics.li/d3955b0。我不知道我是否必須像圖片中那樣通過所有的頭髮和餅乾。我似乎無法找到哪個get或post方法在登錄後刷新頁面... – Anton 2014-09-22 12:19:51

+0

我找到了一個使用標題和獲取刷新頁面的解決方案,謝謝! – Anton 2014-09-22 14:07:52

+0

很高興它解決了。順便說一句,奇怪的是,響應代碼爲302成功登錄。也許是一個新的登錄後頁面。 – aneroid 2014-09-22 15:47:19

0

它看起來不像您發送的實際登錄請求。嘗試類似於:

URL = 'http://www.pogdesign.co.uk/cat/' 
LOGIN_URL = 'http://www.pogdesign.co.uk/login/' # Or whatever the login request url is 
payload = {' password': 'password', ' sub_login': 'Account Login', 'username': 'email'} 

s = requests.Session() 
s.post(LOGIN_URL, data=payload) 
s.get(URL) 
s.content 
# >> your /cat/ content 

關於Session的好處是,它會默認攜帶您的Cookie,因此一旦會話通過身份驗證,它將繼續工作。我在https://github.com/BWStearns/WhiteTruffleScraper的例子中使用了會話登錄。

您可以通過觀看開發工具業務,並在登錄發現登錄請求URL。

+0

感謝您的回答。問題是登錄URL與着陸URL和我想要得到的URL相同,只是通過ajax刷新。這裏是螢火蟲日誌(http://hpics.li/d3955b0)。 – Anton 2014-09-22 12:22:46

+0

啊,對不起。我看到/ cat /,並認爲它是[foo | bar]類型的URL,並沒有看到該網站本身。 – BWStearns 2014-09-22 17:55:03

+1

不用擔心,很有道理! – Anton 2014-09-23 07:36:18