2017-02-20 61 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。 –