我正在尝试模拟登录网站以获取一些数据。以下是我从浏览器获取的表单的来源:
* 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)
任何指针都将受到赞赏。
答案 0 :(得分:1)
事实证明,为登录表单添加带有xpath的formxpath参数解决了这个问题。
答案 1 :(得分:0)
有可能代替登录请求返回带有“set-cookie SESSION = 1234567890ABCD”标头(可能是scrapy为您处理的会话cookie)的响应,它返回一些其他类型的登录令牌(例如,在响应主体中)然后你需要做其他事情(例如,提交到第二个/不同的页面/处理程序)。
了解正在发生的事情的最佳方法是使用FireBug(Firefox扩展程序)等工具在手动登录时分析请求/响应数据,看看是否可以识别它们存储的内容和方式登录状态信息。