2016-08-16 114 views
2

我正在嘗試使用Python的請求庫來自動從大學網站獲取我的成績。網址是https://acorn.utoronto.ca/sws/transcript/academic/main.do?main.dispatch,但有幾個重定向。我有以下簡單的代碼,但它似乎並沒有做我想做的事情。重定向登錄cookie或通過POST傳遞數據?

import requests 

payload = {"user" : "username", "pass" : "password"} 
r = requests.post("https://acorn.utoronto.ca/sws/transcript/academic/main.do?main.dispatch", data= payload) 
print(r.text) 

輸出如下:

C:\Users\johnp\AppData\Local\Programs\Python\Python35-32\python.exe 

C:/Users/johnp/Desktop/git_stuff/16AugRequests/acorn_requests.py <html> <head> </head> <body onLoad="document.relay.submit()"> <form method=post action="https://weblogin.utoronto.ca/" name=relay> <input type=hidden name=pubcookie_g_req value="b25lPWlkcC51dG9yYXV0aC51dG9yb250by5jYSZ0d289Q0lNRl9TaGliYm9sZXRoX1BpbG90JnRocmVlPTEmZm91cj1hNWEmZml2ZT1HRVQmc2l4PWlkcC51dG9yYXV0aC51dG9yb250by5jYSZzZXZlbj1MMmxrY0M5QmRYUm9iaTlTWlcxdmRHVlZjMlZ5Um05eVkyVkJkWFJvJmVpZ2h0PSZob3N0bmFtZT1pZHAudXRvcmF1dGgudXRvcm9udG8uY2EmbmluZT0xJmZpbGU9JnJlZmVyZXI9KG51bGwpJnNlc3NfcmU9NSZwcmVfc2Vzc190b2s9LTczODQ3MDk2OCZmbGFnPTA="> 

您沒有啓用Javascript,請點擊按鈕繼續。

我對此有何看法?我覺得我應該試圖通過一個cookie,但我怎麼會得到cookie?
在此先感謝。

編輯:這是我的東西從Firefox獲得: Network tab

這是否意味着我需要填寫整個表單作爲請求參數?

+0

使用http代理或Chrome Developer Tools或Firefox的Firebug之類的工具。正常使用網站並觀察/記錄爲達到目的地所做的請求。然後,通過代碼重新創建這些請求。 – sberry

+0

我建議你使用硒 – masnun

+0

也許使用無頭瀏覽器? http://selenium-python.readthedocs.io/getting-started.html – martriay

回答

0

你可以嘗試再得到你想要的任何頁面日誌,沒有要發佈更詳細的數據,你可以用BS4得到:

import requests 
from bs4 import BeautifulSoup 
url = "https://weblogin.utoronto.ca/" 
with requests.Session() as s: 
    s.headers.update({"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"}) 
    soup = BeautifulSoup(s.get(url).content) 
    data = {inp["name"]: inp["value"] for inp in soup.select("#query input[value]")} 
    data["user"] = "username" 
    data["pass"] = "password" 
    post = s.post(url, data=data) 
    print post 
    print(post.content) 
    protect = s.get("protected_page") 

如果我們運行的代碼,只打印數據字典中,您可以看到bs4填充了必填字段:

In [14]: with requests.Session() as s: 
    ....:   s.headers.update({"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"}) 
    ....:   soup = BeautifulSoup(s.get(url).content,"html.parser") 
    ....:   data = {inp["name"]:inp["value"] for inp in soup.select("#query input[value]")} 
    ....:   data["user"] = "username" 
    ....:   data["pass"] = "password" 
    ....:   print(data) 
    ....:  
{'seven': '/index.cgi', 'sess_re': '0', 'pre_sess_tok': '0', 'pass': 'password', 'four': 'a5', 'user': 'username', 'reply': '1', 'two': 'pinit', 'hostname': '', 'three': '1', 'pinit': '1', 'relay_url': '', 'nine': 'PInit', 'create_ts': '1471341718', 'referer': '', 'six': 'weblogin.utoronto.ca', 'first_kiss': '1471341718-777129', 'flag': '', 'five': '', 'post_stuff': '', 'creds_from_greq': '1', 'fr': '', 'eight': '', 'one': 'weblogin.utoronto.ca', 'file': ''}