Scrapy CrawlSpider - errback para start_urls
Sep 23 2020
Estou usando CrawlSpidercom regra linkextractor que tem errback.
Estou usando parse_start_urlpara conseguir analisar os, start_urlsmas também preciso errbackdeles.
class CS(CrawlSpider):
name = "CS"
rules = (Rule(LinkExtractor(allow=[], deny=[]), follow=True, callback='my_parse', errback='my_errback'),)
custom_settings = {
'DEPTH_LIMIT': 3,
#etc
}
start_urls = ['url']
allowed_domains = ['domain']
def my_errback(self, failure):
# log all failures
def parse_start_url(self, response):
return self.my_parse(response)
def my_parse(self, response):
# parse responses
O problema que estou enfrentando é que o errback é chamado SOMENTE para os links extraídos e NÃO para start_urls.
Não posso usar o método start_requests (conforme abaixo) porque estou usando CrawlSpider e regras. Quando eu faço isso, apenas os start_urls são removidos:
def start_requests(self):
for u in self.start_urls:
yield scrapy.Request(u, callback=self.my_parse,
errback=self.my_errback)
Respostas
J_Z Sep 24 2020 at 07:20
Esta é a resposta: https://stackoverflow.com/a/34345668/13903397
Basicamente, temos que usar, start_requestsmas remover o parâmetro de retorno de chamada. Dessa forma, o self.parse padrão será chamado e as regras serão respeitadas.
class CS(CrawlSpider):
name = "CS"
rules = (Rule(LinkExtractor(allow=[], deny=[]), follow=True, callback='my_parse', errback='my_errback'),)
custom_settings = {
'DEPTH_LIMIT': 3,
#etc
}
start_urls = ['url']
allowed_domains = ['domain']
def start_requests(self):
for u in self.start_urls:
yield scrapy.Request(u, errback=self.my_errback)
def my_errback(self, failure):
# log all failures
def parse_start_url(self, response):
return self.my_parse(response)
def my_parse(self, response):
# parse responses
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino