Scrapy y código de estado de respuesta: ¿cómo verificarlo?

Estoy usando scrapy para rastrear mi mapa del sitio, para verificar 404, 302 y 200 páginas. Pero parece que no puedo obtener el código de respuesta. Este es mi código hasta ahora:

from scrapy.contrib.spiders import SitemapSpider class TothegoSitemapHomesSpider(SitemapSpider): name ='tothego_homes_spider' ## robe che ci servono per tothego ## sitemap_urls = [] ok_log_file = '/opt/Workspace/myapp/crawler/valid_output/ok_homes' bad_log_file = '/opt/Workspace/myapp/crawler/bad_homes' fourohfour = '/opt/Workspace/myapp/crawler/404/404_homes' def __init__(self, **kwargs): SitemapSpider.__init__(self) if len(kwargs) > 1: if 'domain' in kwargs: self.sitemap_urls = ['http://url_to_sitemap%s/sitemap.xml' % kwargs['domain']] if 'country' in kwargs: self.ok_log_file += "_%s.txt" % kwargs['country'] self.bad_log_file += "_%s.txt" % kwargs['country'] self.fourohfour += "_%s.txt" % kwargs['country'] else: print "USAGE: scrapy [crawler_name] -a country=[country] -a domain=[domain] \nWith [crawler_name]:\n- tothego_homes_spider\n- tothego_cars_spider\n- tothego_jobs_spider\n" exit(1) def parse(self, response): try: if response.status == 404: ## 404 tracciate anche separatamente self.append(self.bad_log_file, response.url) self.append(self.fourohfour, response.url) elif response.status == 200: ## printa su ok_log_file self.append(self.ok_log_file, response.url) else: self.append(self.bad_log_file, response.url) except Exception, e: self.log('[eccezione] : %s' % e) pass def append(self, file, string): file = open(file, 'a') file.write(string+"\n") file.close() 

De los documentos de scrapy, dijeron que el parámetro response.status es un entero que corresponde al código de estado de la respuesta. Hasta ahora, solo registra las 200 URL de estado, mientras que las 302 no están escritas en el archivo de salida (pero puedo ver las redirecciones en crawl.log). Entonces, ¿qué tengo que hacer para “atrapar” las solicitudes 302 y guardar esas URL?

Related of "Scrapy y código de estado de respuesta: ¿cómo verificarlo?"

http://readthedocs.org/docs/scrapy/en/latest/topics/spider-middleware.html#module-scrapy.contrib.spidermiddleware.httperror

Suponiendo que el middleware predeterminado de la araña está habilitado, los códigos de respuesta fuera del rango 200-300 se filtran mediante HttpErrorMiddleware. Puede decirle al middleware que desea manejar 404s configurando el atributo handle_httpstatus_list en su araña.

 class TothegoSitemapHomesSpider(SitemapSpider): handle_httpstatus_list = [404] 

Sólo para tener una respuesta completa aquí:

  • Establecer Handle_httpstatus_list = [302];

  • A petición, establezca dont_redirect en True en meta .

Por ejemplo: Request(URL, meta={'dont_redirect': True});