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`
Vous devriez essayer FormRequest.from_response() – Verz1Lka