我正在尝试使用Python访问和解析网站。站点授权是通过siteminder完成的,因此通常的urllib / urllib2用户密码不起作用。 有谁知道如何做到这一点? 谢谢 NoamM
答案 0 :(得分:2)
刚刚做到这一点 - 我知道这是一个老人 - 但如果有其他人想要这样做 - 请使用请求库。我以前在C#中做过这个并且使用了大量的代码 - 但这只需要登录我的公司siteminder系统 - 很好。 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)
答案 1 :(得分:1)
首先,您应该了解通过siteminder进行身份验证时发生的情况。也许有相关的文档,但如果没有,那就不难发现:Chrome或Safari的开发人员工具中的网络选项卡具有您需要的所有信息:每个网络请求的HTTP标头和Cookie。 Firebug也可以给你。
一旦您清楚了解身份验证过程的每个步骤发生了什么,只需在脚本中复制相同的行为即可。 urllib2支持cookies和headers。如果你需要urllib2没有提供的东西,PycURL可能会这样做。
答案 2 :(得分:1)
同意Martin - 您需要复制浏览器的功能。成功通过身份验证后,Siteminder将向您传递令牌。我也必须这样做,一旦我找到一个好方法就会发布。