Scrapy и код состояния ответа:Как проверить его?
Я использую scrapy для обхода карты сайта, чтобы проверить 404, 302 и 200 страниц. Но я не могу получить код ответа. Это мой код до сих пор:
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_spidern- tothego_cars_spidern- tothego_jobs_spidern"
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()
из документов scrapy, они сказали, что ответ.параметр status представляет собой целое число, соответствующее коду состояния ответа. До сих пор он регистрирует только 200 URL-адресов состояния, в то время как 302 не записываются в выходной файл (но я вижу перенаправления в обходе.бревно.) Итак, что мне нужно сделать, чтобы" поймать " 302 запросы и сохранение этих URL-адресов?
2 ответов
предполагая, что промежуточное ПО spider По умолчанию включено, коды ответов за пределами диапазона 200-300 отфильтровываются HttpErrorMiddleware. Вы можете указать промежуточное ПО, которое хотите обработать 404s, установив атрибут handle_httpstatus_list на своем spider.
class TothegoSitemapHomesSpider(SitemapSpider):
handle_httpstatus_list = [404]
только для того, чтобы иметь полный ответ здесь:
Set
Handle_httpstatus_list = [302];
по требованию dont_redirect to правда on мета.
например: Request(URL, meta={'dont_redirect': True});