我正以粗略的时间以编程方式从网站收集数据。我试图利用this example登录服务器,但由于我认为这是错误的登录类型,因此无法正常工作。
当我尝试下载数据以解析html时,我尝试访问的网站会重定向到登录页面。
这是网址:
https://mtred.com/rewards.html
并且代码是:
# build opener with HTTPCookieProcessor
o = urllib2.build_opener( urllib2.HTTPCookieProcessor() )
urllib2.install_opener( o )
# assuming the site expects 'user' and 'pass' as query params
p = urllib.urlencode( { 'UserLogin_username': 'mylogin', 'UserLogin_password': 'mypass' } )
# perform login with params
f = o.open( 'http://www.mtred.com/user/login.html', p )
data = f.read()
f.close()
# second request should automatically pass back any
# cookies received during login... thanks to the HTTPCookieProcessor
f = o.open( 'https://www.mtred.com/rewards.html',p )
data = f.read()
print data
当我试图打开奖励时,它再次将我踢到登录页面。我试图通过奖励自动进行一些统计,因为这些信息不能通过公共API获得
答案 0 :(得分:1)
弹出的一个问题是您传递的是登录表单参数的id
值,而不是name
参数。例如,在用户名表单字段中,您指定了UserLogin_username
,但服务器所期望的该字段的名称为"UserLogin[username]"
<label for="UserLogin_username" class="required">
username or email <span class="required">*</span></label>
<input name="UserLogin[username]" id="UserLogin_username" type="text" /> </div>
<div class="row">
<label for="UserLogin_password" class="required">password <span class="required">*</span></label>
<input name="UserLogin[password]" id="UserLogin_password" type="password" /> </div>
由于服务器没有获取它所知道的参数,因此您看到的行为并非意外。 (并不是说这里没有其他问题;没看过。)
答案 1 :(得分:0)
您必须在帖子数据中包含html表单中包含的名为“YII_CSRF_TOKEN”的值。 或使用“ClientForm”lib