tutorial robotstxt_obey formrequest follow custom_settings python scrapy http-status-codes

python - formrequest - scrapy robotstxt_obey



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

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});

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?