3

我正在尝试使用 Python 访问和解析工作中的网站。站点授权是通过 siteminder 完成的,因此通常的 urllib/urllib2 用户密码不起作用。有谁知道如何做到这一点?谢谢诺姆

4

3 回答 3

2

只是这样做了 - 我知道它是一个老歌 - 但如果其他人想要这样做 - 使用请求库。我之前在 C# 中做过这个,并且使用了大量的代码——但这就是登录我的公司站点管理员系统所需要的全部内容——很好。request.session() 对象将保留重定向、标头和 cookie - 所以您需要担心的只是发布登录表单。我确信变量在您的环境中会有所不同,但过程将是相同的。

output.text 将是您要解析的目标页面的正文,然后您可以使用 xpath 或其他任何内容。

import requests
r = requests.session()
postUrl = "https://loginUrl"
params = {  'USER': 'user',
            'PASSWORD': 'pass',
            'SMENC': 'ISO-8859-1',
            'SMLOCALE': 'US-EN',
            'target': '/redir.shtml?GOTO=redirecturl}',
            'smauthreason': '0' }

r.post(postUrl, data=params)

getUrl = "http://urlFromBehindLogInYouWantDataFrom"
output = r.get(getUrl)
print(output.text)
于 2017-08-06T22:32:07.067 回答
1

首先,您应该了解通过站点管理员进行身份验证时发生的情况。也许有它的文档,但如果没有的话,也不难找到:Chrome 或 Safari 的开发者工具中的网络选项卡包含您需要的所有信息:每个网络请求的 HTTP 标头和 Cookie。Firebug也可以为您提供。

一旦您清楚地了解身份验证过程的每个步骤发生了什么,只需在脚本中复制相同的行为即可。urllib2支持cookieheaders。如果你需要一些 urllib2 没有提供的东西,PycURL可能会做。

于 2012-04-16T21:01:49.720 回答
1

同意 Martin - 您只需复制浏览器的功能即可。一旦成功通过身份验证,Siteminder 将向您传递一个令牌。我也必须这样做,一旦找到好方法就会发布。

于 2013-10-31T07:23:42.890 回答