【问题标题】:Webscraping my grades网络刮我的成绩
【发布时间】:2017-02-20 13:36:51
【问题描述】:

我正在尝试创建一个每天从网站获取我的学校成绩的程序。然后存储值并为我的成绩创建一个图表,但是当我尝试抓取页面时,我收到的 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

我认为这是因为我的成绩 (https://ames.usoe-dcs.org/Students/2567) 的 URL 是私有的,所以当你在浏览器中输入它时,它会在此处返回我:https://ames.usoe-dcs.org/Login/?DestinationURL=%2FStudents%2F2566

有没有办法使用 python 让我自动登录?

【问题讨论】:

  • 您必须弄清楚该站点如何允许您在浏览器中进行身份验证。例如,当您使用您的用户名/密码成功登录时,HTTP 响应可能会返回一个 Set-Cookie 标头,您必须将其与所有后续 HTTP 请求一起传递。
  • 如果网站从未将您注销,那么您可以将 cookie 与您的脚本一起保存(而不是您的用户名和密码)。

标签: python html python-3.x web-scraping


【解决方案1】:

该 URL 不一定是私有的,但是在没有 cookie 验证您作为用户的状态的情况下请求该 URL 不会让您获得您在登录时看到的信息。

我建议将 Inspect Element 打开到网络选项卡并重新加载包含您的成绩的页面(登录时)。然后右键单击第一个请求(应该是用 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)

cookies 和 headers 字典来自 cURL 到 Python 输出。

【讨论】:

  • 如何从 python 请求中获取 HTML?我不熟悉请求
  • 我的置顶评论措辞奇怪,使用网站后我的成绩值如何获得?
  • 你必须学习一些 BeautifulSoup 的基础知识。基本上,第一个参数是包含您的成绩的元素的标签名称,之后您可以创建一个元素属性和值的字典,以指定您所指的元素。末尾的内容属性采用元素的内部 HTML。
  • 我尝试了 print(r),我得到了 这正常吗?
  • 问太多问题我感觉很糟糕,但我尝试了你的代码,我得到了 Traceback(最近一次调用最后一次):文件“C:\Users\Gerald\Python\matplotlibTesting.py”,第 26 行, 在 汤 = bs4(r.text, "lxml") TypeError: 'module' object is not callable
猜你喜欢
  • 2018-10-29
  • 2020-12-12
  • 2016-06-08
  • 2018-05-06
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多