Scrapy et le code d'état de réponse: comment vérifier contre cela?
Je suis l'aide de scrapy pour analyser mon sitemap, pour vérifier 404, 302 et 200 pages. Mais je n'arrive pas à être en mesure d'obtenir le code de réponse. C'est mon code pour l'instant:
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 scrapy de docs, ils ont dit que la réponse.le statut de paramètre est un entier correspondant au code d'état de la réponse. Jusqu'à présent, il enregistre seulement le statut 200 urls, tandis que le 302 ne sont pas écrites sur le fichier de sortie (mais je peux voir les redirections de l'analyse.le journal). Alors, que dois-je faire pour "piéger" les 302 demandes et économisez de l'url?
source d'informationauteur Samuele Mattiuzzo
Vous devez vous connecter pour publier un commentaire.
http://readthedocs.org/docs/scrapy/en/latest/topics/spider-middleware.html#module-scrapy.contrib.spidermiddleware.httperror
En supposant par défaut spider middleware est activée, les codes de réponse en dehors de la 200-300 gamme sont filtrés par HttpErrorMiddleware. Vous pouvez dire le middleware vous souhaitez gérer une erreur 404 en définissant la handle_httpstatus_list attribut sur votre spider.
Seulement pour avoir une réponse complète ici:
Ensemble
Handle_httpstatus_list = [302];
Sur demande, l'ensemble dont_redirect à Vrai sur méta.
Par exemple:
Request(URL, meta={'dont_redirect': True});