Я пытаюсь использовать scrapy для проверки некоторых веб-сайтов и их дочерних сайтов на наличие кодов возврата http, чтобы обнаружить ошибки в диапазоне 400 и 500.Однако я также хотел бы видеть и обрабатывать коды в диапазоне 300.Я пытался в течение нескольких дней и проверял документы, однако я застрял и не могу найти решение.Спасибо за помощь!
После вы увидите паука, которого я создаю с помощью CrawlSpider.Цель состоит в том, чтобы увидеть / перехватить ответы http в диапазонах ошибок в моей функции parse_item ().Я добавил handle_httpstatus_all = True в settings.py, но ничего, кроме HTTP_STATUS = 200, не приходит в parse_item.
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy import log
class IcrawlerSpider(CrawlSpider):
name = 'icrawler'
def __init__(self, *args, **kwargs):
# We are going to pass these args from our django view.
# To make everything dynamic, we need to override them inside__init__method
handle_httpstatus_all = True
self.url = kwargs.get('url')
self.domain = kwargs.get('domain')
self.start_urls = [self.url]
self.allowed_domains = [self.domain]
IcrawlerSpider.rules = [
Rule(LinkExtractor(unique=True), callback='parse_item'),
]
super(IcrawlerSpider, self).__init__(*args, **kwargs)
def parse_item(self, response):
# You can tweak each crawled page here
# Don't forget to return an object.
if response.status==403:
self.logger.errror("ERROR_CODE_RETURNED: " + response.status)
i = {}
i['url'] = response.url
i['status_code'] = response.status
return i
Скорее всего, я упускаю что-то элементарное, когда дело доходит до причины, по которой не передаются коды ошибок.