登录时FormRequest Scrapy出现问题

时间:2017-12-19 13:43:26

标签: python scrapy

我正在尝试从AliceWeb2检索信息。为此,我需要登录,但我不能。我将我的用户,通过并在Google Chrome中的检查工具中搜索了一个包含请求方法:POST的页面,如下所示:

Network Tool

所以,使用以下代码:

from scrapy.item import Item, Field
from scrapy.http import FormRequest
from scrapy.spider import Spider
from scrapy.utils.response import open_in_browser
from scrapy import Request


class AliceWeb2(Spider):
    name = "login"

    # Start on the welcome page
    def start_requests(self):
        return [Request(
                "http://aliceweb.mdic.gov.br//usuario/login/",
                callback=self.parse_welcome)]

    # Post welcome page's first form with the given user/pass
    def parse_welcome(self, response):
        formdata = {'logUser': 'rtadewald',
                    'logPass': '123'}
        return FormRequest.from_response(
            response,
            formdata=formdata)

我得到了这个: Scrapy CMD's bug

1 个答案:

答案 0 :(得分:0)

首先,使用yield代替return

每当您尝试模仿请求时,只需打开开发工具,然后复制该网址的cURL,然后转到此https://curl.trillworks.com/网站,获取您的Python代码,然后重新使用该代码进入Scrapy。

enter image description here

class AliceWeb2(Spider):
    name = "login"

    # Start on the welcome page
    def start_requests(self):
        headers = {
            'Origin': 'http://aliceweb.mdic.gov.br',
            'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'en-US,en;q=0.9',
            'Upgrade-Insecure-Requests': '1',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36',
            'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
            'Cache-Control': 'max-age=0',
            'Referer': 'http://aliceweb.mdic.gov.br/usuario/recuperar-senha',
            'Connection': 'keep-alive',
            'DNT': '1',
        }

        yield Request('http://aliceweb.mdic.gov.br//usuario/login?tx_usuario=ABC&tx_senha=ABC', callback=self.parse_welcome, headers=headers, data=data, method="POST")

    def parse_welcome(self, response):
        #do something here

编辑1: 当我在Dev Tools中观察到请求时,我看到这些参数正在发送,请参见屏幕截图中的FORM DATA

(另一个提示): 检查preserver log,以便您可以查看上一页中发送的请求,以防网站在登录后将您重定向到其他某个页面。

enter image description here