来自响应的Scrapy FormRequest AtrributeError:'str'对象没有属性'encoding'

时间:2017-07-26 01:05:34

标签: facebook python-3.x login scrapy

我正在尝试使用Scrapy登录Facebook。

我已经确定Facebook的移动版本没有javascript,所以我正在使用它。

相关代码是

from loginform import fill_login_form
from scrapy.http import FormRequest

def parse(self, response):
    """Login to Facebook then pass on"""
    payload = fill_login_form(
        response.request.url,  # https://m.facebook.com
        response.body,
        self.login_user,
        self.login_pass
    )
    return FormRequest.from_response(
        response.request.url,
        formdata=payload,
        formid='login-form',
        callback=self.after_login
    )

我得到的错误是:

File "/XXX/scraps/scraps/spiders/fb.py", line 44, in parse
    return FormRequest.from_response(response.request.url, formdata=payload, formid='login-form', callback=self.after_login)
  File "/XXX/venv/lib/python3.6/site-packages/scrapy/http/request/form.py", line 42, in from_response
    kwargs.setdefault('encoding', response.encoding)
AttributeError: 'str' object has no attribute 'encoding'

Scrapy处于默认设置。

我希望我的蜘蛛登录m.facebook.com。我很确定这只是我的弱谷歌,但我无法确定,如何继续前进。

1 个答案:

答案 0 :(得分:5)

from_response方法要求第一个参数为response对象而不是网址,请检查docs,这是一个使用FormRequest.from_response来模拟用户登录。