2011-07-27 110 views
0

我有一段艰难的时间以编程方式从网站收集数据。我试图利用this example登录到服务器,但它不工作,因为我认为这是一种错误的登录类型。检索重定向到python中的登录页面的页面

当我尝试下载数据以解析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获得

回答

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> 

由于服务器是不是又回到它知道参​​数,行为你看到的并不意外。 (不是说这里没有其他问题;还没有看过。)

0

你必须在你的发布数据中包含html格式包含的名为“YII_CSRF_TOKEN”的值。 或使用“ClientForm”lib