Я пытаюсь очистить веб-сайт от неработающих ссылок, пока у меня есть этот код, который успешно входит в систему и сканирует сайт, но он записывает только коды HTTP-статуса 200:
class HttpStatusSpider(scrapy.Spider):
name = 'httpstatus'
handle_httpstatus_all = True
link_extractor = LinkExtractor()
def start_requests(self):
"""This method ensures we login before we begin spidering"""
# Little bit of magic to handle the CSRF protection on the login form
resp = requests.get('http://localhost:8000/login/')
tree = html.fromstring(resp.content)
csrf_token = tree.cssselect('input[name=csrfmiddlewaretoken]')[0].value
return [FormRequest('http://localhost:8000/login/', callback=self.parse,
formdata={'username': 'mischa_cs',
'password': 'letmein',
'csrfmiddlewaretoken': csrf_token},
cookies={'csrftoken': resp.cookies['csrftoken']})]
def parse(self, response):
item = HttpResponseItem()
item['url'] = response.url
item['status'] = response.status
item['referer'] = response.request.headers.get('Referer', '')
yield item
for link in self.link_extractor.extract_links(response):
r = Request(link.url, self.parse)
r.meta.update(link_text=link.text)
yield r
документы и эти ответы заставляют меня поверить, что handle_httpstatus_all = True
должен привести к тому, что scrapy будет передавать ошибочные запросы моему методу parse
, но до сих пор яЯ не смог захватить их.
Я также экспериментировал с handle_httpstatus_list
и пользовательским обработчиком errback
в другой итерации кода.
Что мне нужно изменить назахватить коды ошибок HTTP, с которыми сталкивается скрап?