2017-05-31 2 views
0

Le site Web a un jeton d'authentification caché, mais les docs semblent suggérer que je n'ai pas besoin de remplacer la valeur par défaut ici, et seulement besoin de passer le nom d'utilisateur et mot de passe. En regardant dans l'onglet Réseau, je remarque qu'en plus de poster un jeton d'authentification, il y a aussi de nombreux cookies. Je ne sais pas si je dois faire quelque chose là-bas.Échec de connexion scrapy

Mon code, bricolé des tentatives précédentes de diverses autres personnes:

The website does have a hidden authentication token, but the [docs][1] seem to suggest I don't need to override the default here, and only need to pass the username and password. 

En regardant dans l'onglet Réseau, je remarque que, en plus d'afficher un jeton d'authentification, il y a aussi de nombreux cookies. Je ne sais pas si je dois faire quelque chose là-bas.

Mon code, bricolé à partir d'autres tentatives précédentes de personnes:

import scrapy 
from scrapy.selector import Selector 
from scrapy import Spider 
from scrapy.contrib.spiders.init import InitSpider 
from scrapy.spider import BaseSpider 
from scrapy.http import Request, FormRequest 
from scrapy import log 
from scrapy.crawler import CrawlerProcess 

from dealinfo.items import DealinfoItem 

class DealinfoSpider(scrapy.Spider): 
    name = 'dealinfo' 
    allowed_domains = ['dealinfo.com'] 
    #login_page = 'https://dealinfo.com/users/sign_in' 
    start_urls = 'https://dealinfo.com/organizations/xxxx/member_landing' 

    def start_requests(self): 
     return [Request(url='https://dealinfo.com/users/sign_in', callback=self.login)] 

    def login(self, response): 
     return FormRequest(
          'https://dealinfo.com/users/sign_in', 
          formdata={ 
            'user[email]':'xxxxx', 
            'user[password]':'xxxxx' 
          }, 
          callback=self.after_login) 

    def after_login(self, response): 
     if "authentication failed": 
      self.log("Login failed", level=log.ERROR) 
      return 

     self.log('Login Successful. Parsing all other URLs') 
     for url in self.start_urls: 
      yield self.make_requests_from_url(url) 

    def parse(self, response): 
     deal_list = Selector(response).xpath('//table[@id="deal_list"]/tbody[@class="deal-list__row"]/tr[@class="deal"]') 

     for deal_row in deal_list: 
      item = DealinfoItem() 
      item['capital_seeking'] = deal_row.xpath('td[2]/text()').extract() 
      yield item` 
+0

Vous devriez essayer FormRequest.from_response() – Verz1Lka

Répondre

1

Il vous manque un peu formdata dans votre demande de connexion:

formdata

Vous pouvez trouver authenticity_token dans la source de page du page de connexion:

token

+0

Cela ne semble pas être le problème ... car j'ai essayé de passer le jeton d'authenticité. ET les docs scrapy disent que pne n'a pas à remplacer tout sauf l'utilisateur et le mot de passe. –

+0

Je pense que c'est nécessaire. Surtout si le jeton d'authentification est créé en externe. Quoi qu'il en soit, essayez-le, peut travailler, peut-être pas. Ça vaut le coup quand même. –