通过scrapy模拟表单登录

时间:2014-04-11 23:26:41

标签: python web-scraping scrapy

我正在尝试模拟登录网站以获取一些数据。以下是我从浏览器获取的表单的来源:

* form method =" POST"行动=" /帐户/登录/" ID =" login_form"类=" submit_form" div style =' display:none'> / div> input type =" hidden"名称="下一个" value =" /" *

在scrapy中,我按照文档中的建议执行以下操作。

def parse(self, response):
    return [FormRequest.from_response(response, 
                                      formdata={'username': self.uname, 
                                                'password': self.key},  
                                                 callback= self.afterlogin)]


def afterlogin(self, response):
    #check login succeed before going on
    if "authentication failed" in response.body:
         self.log("Login failed", level=log.ERROR)
    else:
        return Request(url="http://example.com",
                           callback=self.parse_Page)

但是,我似乎没有登录,我在日志中不会收到任何错误。我不确定我是否遗漏了表单数据中的内容?它从日志中看出我正被重定向:

DEBUG:重定向(301) 其次是 调查:抓取(404)

任何指针都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

事实证明,为登录表单添加带有xpath的formxpath参数解决了这个问题。

答案 1 :(得分:0)

有可能代替登录请求返回带有“set-cookie SESSION = 1234567890ABCD”标头(可能是scrapy为您处理的会话cookie)的响应,它返回一些其他类型的登录令牌(例如,在响应主体中)然后你需要做其他事情(例如,提交到第二个/不同的页面/处理程序)。

了解正在发生的事情的最佳方法是使用FireBug(Firefox扩展程序)等工具在手动登录时分析请求/响应数据,看看是否可以识别它们存储的内容和方式登录状态信息。