2017-02-20 57 views
0

我試圖創建一個程序,每天從網站上抓取我的學校成績。然後存儲這些值併爲我的成績創建一個圖表,但是當我嘗試刮取頁面時,我收到的HTML不同於那些與檢查元素一起獲得的HTML。網絡蒐集我的成績

from urllib.request import urlopen 
from bs4 import BeautifulSoup 
html = urlopen("https://ames.usoe-dcs.org/Students/2567") 
bsObj = BeautifulSoup(html.read(), 'lxml'); 
print(bsObj) 

檢查元素給了我:http://pastebin.com/BakmpqUM

而Python給我:http://pastebin.com/7gPY1WgB

我想,這是因爲URL到我的成績(https://ames.usoe-dcs.org/Students/2567)是私有的,所以當你將它輸入瀏覽器它返回我這裏:https://ames.usoe-dcs.org/Login/?DestinationURL=%2FStudents%2F2566

有沒有辦法使用python來自動登錄我?

+0

您必須弄清楚該網站如何讓您在瀏覽器中進行身份驗證。例如,當你用你的用戶名/密碼成功登錄時,HTTP響應可能會返回一個'Set-Cookie'頭,你必須將所有後續的HTTP請求傳遞給它。 – ryannjohnson

+0

如果網站從未將您註銷,那麼您可以將cookie保存在腳本中(而不是用戶名和密碼)。 – ryannjohnson

回答

0

的URL不一定是私有的,但是不要求驗證的Cookie作爲用戶你的狀態的網址不會讓你看到,當你登錄的信息。

我會建議打開檢查元素來網絡標籤,並重新加載頁面上的成績(登錄時)。然後右鍵點擊第一個請求(應該是一個用HTML回答的GET請求,代碼200),將鼠標懸停在副本上,然後單擊Copy as cURL command (bash)。然後粘貼到this webpage並複製python。它會爲您提供適當的頁面請求,包括用於在瀏覽器中訪問它們的Cookie和驗證參數。從那裏你可以解析你的分數的HTML響應。

你應該有這樣的事情接受和請求解析您的HTML:

cookies = { 
    ...stuff... 
} 
headers = { 
    ...stuff... 
} 

r = requests.get("https://ames.usoe-dcs.org/Students/2567", headers=headers, cookies=cookies) 
soup = BeautifulSoup(r.text, "lxml") 
grade = soup.find("h1", {"class":"grade"}).contents # Customize to find your grade 
print(grade) 

的cookie和頭字典來自捲曲到Python輸出。

+0

我如何從python請求獲取HTML?我不熟悉請求 – PinkChicken

+0

我奇怪地評論了最重要的評論,我如何在使用該網站後獲得我的成績的價值? – PinkChicken

+0

你必須學習一些BeautifulSoup的基礎知識。基本上,第一個參數是包含您的成績的元素的標籤名稱,然後您可以創建一個元素屬性和值的字典,以指定您所引用的元素。最後的content屬性採用元素的內部HTML。 –