2017-02-20 6 views
0

Я пытаюсь создать программу, которая ежедневно захватывает мои школьные оценки с сайта. Затем сохраняет значения и создает график для моих оценок, но когда я пытаюсь очистить страницу, HTML, который я получаю, отличается от HTML, который я получаю с элементом проверки.Webscraping my grades

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

в то время как питон дает мне: 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-адрес не обязательно частным, однако запрашивает URL без печенья проверочного своего статуса как пользователь не получат вам информацию, которую вы видите, когда вы вошли в системе.

Я бы рекомендовал открывать Осмотрите элемент на вкладку сети и перезагрузите страницу своими оценками на ней (при входе в систему). Затем щелкните правой кнопкой мыши по первому запросу (должен быть GET-запрос с кодом HTML, код 200), наведите курсор на копию, затем нажмите Copy as cURL command (bash). Затем вставьте в this webpage и скопируйте питон. Он предоставит вам правильный запрос на страницу, включая файлы 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) 

Куки и заголовки словари приходят из локонов на выходе Python.

+0

Как получить HTML-код из запроса python? я не знаком с запросами – PinkChicken

+0

Я сформулировал верхний комментарий странно, как мне получить значение моих оценок после использования веб-сайта? – PinkChicken

+0

Вам нужно будет изучить некоторые основы BeautifulSoup. В основном первым аргументом является имя тега элемента, который содержит ваш класс, и после этого вы можете создать словарь атрибутов и значений элементов, которые определяют, к какому элементу вы обращаетесь. Атрибут содержимого в конце принимает внутренний HTML элемента. –