Usando loginform con scrapy

El framework scrapy ( https://github.com/scrapy/scrapy ) proporciona una biblioteca para usar al iniciar sesión en sitios web que requieren autenticación, https://github.com/scrapy/loginform .
He revisado los documentos de ambos progtwigs, sin embargo, parece que no puedo encontrar la forma de obtener scrapy para llamar al formulario de inicio de sesión antes de ejecutar. El inicio de sesión funciona bien con solo loginform.
Gracias

loginform es solo una biblioteca, totalmente desacoplada de Scrapy.

Debe escribir el código para enchufarlo en la araña que desea, probablemente en un método de callback.

Aquí hay un ejemplo de una estructura para hacer esto:

 import scrapy from loginform import fill_login_form class MySpiderWithLogin(scrapy.Spider): name = 'my-spider' start_urls = [ 'http://somewebsite.com/some-login-protected-page', 'http://somewebsite.com/another-protected-page', ] login_url = 'http://somewebsite.com/login-page' login_user = 'your-username' login_password = 'secret-password-here' def start_requests(self): # let's start by sending a first request to login page yield scrapy.Request(self.login_url, self.parse_login) def parse_login(self, response): # got the login page, let's fill the login form... data, url, method = fill_login_form(response.url, response.body, self.login_user, self.login_password) # ... and send a request with our login data return scrapy.FormRequest(url, formdata=dict(data), method=method, callback=self.start_crawl) def start_crawl(self, response): # OK, we're in, let's start crawling the protected pages for url in self.start_urls: yield scrapy.Request(url) def parse(self, response): # do stuff with the logged in response 

Logré que funcionara sin la biblioteca loginform, mi solución está a continuación.

 import scrapy import requests class Spider(scrapy.Spider): name = 'spider' start_urls = [ 'http://start.com', ] def start_requests(self): return [scrapy.FormRequest("login.php", formdata={'username': 'user', 'password': 'pass'}, callback=self.start_crawl)] def start_crawl(self, response): #start crawling