【问题标题】:Python Request Authorization [closed]Python请求授权[关闭]
【发布时间】:2017-07-06 18:45:40
【问题描述】:

出于税收目的,我需要提取网站的一些信息,但遗憾的是,“导出”功能无法提供我需要的所有信息。该信息确实存在于网站上,作为 250 多个网页中的每一个中的一个字段。我可以单击每一个并将它们全部保存并使用脚本处理它们,但我宁愿学习一些东西。

request 包自称是天赐之物,尽管我并不喜欢它。问题是我必须登录我的网站。 request 的文档包括 this link on authentication,记录了各种形式的身份验证,但没有包含有关如何判断我的网站实际使用哪种形式的身份验证的信息。我假设当我登录网站时在我的计算机上放置了某种 cookie,理论上,我可以在我的硬盘驱动器上找到它并将其与我的请求一起发送,但我几乎没有使用 cookie 的经验和/或授权,但不知道要发送什么。

如果我可以向同一个站点上的一系列 url 发出一批请求,并且只下载 html,我就可以处理它并生成报告。

在您的回复中,如果有任何关于 http 身份验证和 cookie 如何协同工作的一般知识的链接,我也很乐意阅读。

非常感谢您提供的任何帮助。

【问题讨论】:

标签: python authentication cookies web-scraping


【解决方案1】:

尝试以下方法:

我正在使用BasicAuth,因为它是最常见的身份验证形式;您可以通过查看documentation

将其更改为任何其他形式

使用以下作为“基本代码”,您可以创建要访问的urlslistdict 并循环访问它们。上面的代码也可以让你免去“定位到硬盘上的cookies并加载它们”的麻烦。

编辑:查看 OP 的 cmets 后:

import requests

login_url = "https://www.wyzant.com/sso/login"    # this is the login for's action url, extracted it from the source code

payload = {
    "Username" : "<username>",
    "Password" : "<password>"
}
with requests.Session() as s:
    r = s.post(login_url, data=payload)
    cookies = r.cookies
    r = s.get(url, cookies=cookies)    # do whatever

我已经尝试了上面的确切代码,运行良好,并且能够登录和访问学生仪表板。

干杯。

【讨论】:

  • 是的,这与我发布的链接相同。问题是我不知道 login_url,我什至不知道是否正在使用 BasicAuth。当我点击“登录”按钮时,它会交给一些我找不到学习的 JavaScript。据我所知,javascript 代表我发出了几个 http 请求,然后发生了一些神奇的事情,我得到了我的页面。这些http url中的哪一个是我想要的?那么:给定一个任意网站,确定它使用哪种身份验证方式以及如何从我自己的脚本登录和访问页面的基本工作流程是什么?
  • 基本网址是什么?
  • wyzant.com。我尝试回答我自己的问题并按照本教程进行操作:kazuar.github.io/scraping-tutorial——我得到了 csrf 令牌(wyzant 没有)并卡住了。它说,可以理解的是,“请记住,这是该站点的特定情况。虽然此登录表单很简单,但其他站点可能需要我们检查浏览器的请求日志并找到我们应该使用的相关键和值用于登录步骤。”我已经为请求日志设置了 Chrome 开发者工具的网络选项卡,但我不知道我在寻找什么。
  • @EdKrohne 我现在已经编辑并修复了它。在我的机器上完美运行。如果它有效,那么请接受并投票。干杯。
  • 赞成并接受。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2019-03-23
  • 2021-12-04
  • 1970-01-01
  • 2016-10-24
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多