无法使用scrapy

时间:2016-12-01 05:33:10

标签: authentication scrapy http-post

我是scrapy的新手并试图从fandromeda.com网站抓取一些数据,但我需要首先进行身份验证才能开始抓取以下网址所需的数据

https://fandromeda.com/v2/event/results

我正在尝试使用from_response方法尝试登录网站

import scrapy
from scrapy.spiders import CrawlSpider
from scrapy.http import Request, FormRequest
from scrapy.selector import Selector
from fandromeda.items import FandromedaItem

class FandromedaC(CrawlSpider):
    name = 'fandromeda_c'
    allowed_domains = ['fandromeda.com']
    start_urls = ['https://fandromeda.com/user/signin']

    def parse(self, response):

        sel = Selector(response)
        sign_in = sel.xpath('//button[@type="submit"]/text()').extract()

        if sign_in:
            if sign_in[0] == "SIGN IN":
                self.log("$$$$$$$$$$$$$$$$$$")
                form_data = {'username': 'xxxx','password': 'xxxx' }
                return scrapy.FormRequest.from_response(response,formdata=form_data,callback=self.parse_login_response)

    def parse_login_response(self,response):
        self.log("#####################")
        self.log(response.status)

我希望被重定向到主页并获得响应的内容,但我得到的只是登录页面。

我注意到scrapy正在提出请求而不是默认情况下的帖子。 2016-12-01 10:53:44 [scrapy] DEBUG:Crawled(200)https://fandromeda.com/user/signin?handle=&username=xxxx&password=xxxx> (引用者:https://fandromeda.com/user/signin

我尝试在响应强制scrapy时使用方法参数来使用POST方法

scrapy.FormRequest.from_response(response,method="POST",formdata=form_data,callback=self.parse_login_response)

现在scrapy发布了帖子请求,但结果有所不同。 有人能指出我需要做什么的正确方向吗?

1 个答案:

答案 0 :(得分:0)

他们的登录页面接受JSON而不是带有值的简单表单。

而不是formdata=form_data使用formdata=json.dumps(form_data)