2012-06-08 16 views
11

Así que leí el Crawling with an authenticated session in Scrapy y me estoy colgando, estoy 99% seguro de que mi código de análisis es correcto, simplemente no creo que el inicio de sesión sea redirigido y exitoso.Arrastrando LinkedIn mientras estaba autenticado con Scrapy

También estoy teniendo un problema con el check_login_response() no estoy seguro de qué página está revisando .. Aunque "Cerrar sesión" tendría sentido.




====== ====== ACTUALIZADO

from scrapy.contrib.spiders.init import InitSpider 
from scrapy.http import Request, FormRequest 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor 
from scrapy.contrib.spiders import Rule 

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 

from linkedpy.items import LinkedPyItem 

class LinkedPySpider(InitSpider): 
    name = 'LinkedPy' 
    allowed_domains = ['linkedin.com'] 
    login_page = 'https://www.linkedin.com/uas/login' 
    start_urls = ["http://www.linkedin.com/csearch/results?type=companies&keywords=&pplSearchOrigin=GLHD&pageKey=member-home&search=Search#facets=pplSearchOrigin%3DFCTD%26keywords%3D%26search%3DSubmit%26facet_CS%3DC%26facet_I%3D80%26openFacets%3DJO%252CN%252CCS%252CNFR%252CF%252CCCR%252CI"] 

    def init_request(self): 
     #"""This function is called before crawling starts.""" 
     return Request(url=self.login_page, callback=self.login) 

    def login(self, response): 
     #"""Generate a login request.""" 
     return FormRequest.from_response(response, 
        formdata={'session_key': '[email protected]', 'session_password': 'somepassword'}, 
        callback=self.check_login_response) 

    def check_login_response(self, response): 
     #"""Check the response returned by a login request to see if we aresuccessfully logged in.""" 
     if "Sign Out" in response.body: 
      self.log("\n\n\nSuccessfully logged in. Let's start crawling!\n\n\n") 
      # Now the crawling can begin.. 

      return self.initialized() # ****THIS LINE FIXED THE LAST PROBLEM***** 

     else: 
      self.log("\n\n\nFailed, Bad times :(\n\n\n") 
      # Something went wrong, we couldn't log in, so nothing happens. 

    def parse(self, response): 
     self.log("\n\n\n We got data! \n\n\n") 
     hxs = HtmlXPathSelector(response) 
     sites = hxs.select('//ol[@id=\'result-set\']/li') 
     items = [] 
     for site in sites: 
      item = LinkedPyItem() 
      item['title'] = site.select('h2/a/text()').extract() 
      item['link'] = site.select('h2/a/@href').extract() 
      items.append(item) 
     return items 



El problema se resolvió mediante la adición de 'Volver' en frente del auto .inicializado()

Gracias de nuevo! -Mark

+0

¿Qué sucede cuando ejecuta el código anterior? – Acorn

+0

' 'request_depth_max': 1, \t 'planificador/memory_enqueued': 3, \t 'hora_inicio': datetime.datetime (2012, 6, 8, 18, 31, 48, 252,601)} 2012-06-08 14 : 31: 49-0400 [LinkedPy] INFORMACIÓN: Spider cerrado (finalizado) 2012-06-08 14: 31: 49-0400 [scrapy] INFORMACIÓN: Descarga de estadísticas globales: {} ' – Gates

+2

Este tipo de información debe colocarse en su pregunta original en lugar de comentarios. – Acorn

Respuesta

2
class LinkedPySpider(BaseSpider): 

debería ser:

class LinkedPySpider(InitSpider): 

También usted no debe reemplazar la función parse como he mencionado en mi respuesta aquí: https://stackoverflow.com/a/5857202/crawling-with-an-authenticated-session-in-scrapy

Si usted no entiende cómo defina las reglas para extraer enlaces, solo lea correctamente la documentación:
http://readthedocs.org/docs/scrapy/en/latest/topics/spiders.html#scrapy.contrib.spiders.Rule
http://readthedocs.org/docs/scrapy/en/latest/topics/link-extractors.html#topics-link-extractors

+0

Eso ayudó. Veo un registro de éxito. ** Pero ** No estoy seguro de que el 'def análisis (uno mismo, respuesta):' se está ejecutando realmente. Intenté poner un self.log() allí y no me devolvió nada. – Gates

+0

También la url 'start_urls' no parece aparecer en el registro – Gates

+0

Parece que' parse() 'debe ser' parse_item() ' – Gates

Cuestiones relacionadas