Raspagem de repetição de aranha
Para uma página que estou tentando raspar, às vezes recebo uma página de "espaço reservado" na minha resposta que contém algum javascript que é carregado automaticamente até que ela chegue à página real. Posso detectar quando isso acontece e quero tentar novamente o download e a raspagem da página. A lógica que eu uso no meu CrawlSpider é algo como:
def parse_page(self, response):
url = response.url
# Check to make sure the page is loaded
if 'var PageIsLoaded = false;' in response.body:
self.logger.warning('parse_page encountered an incomplete rendering of {}'.format(url))
yield Request(url, self.parse, dont_filter=True)
return
...
# Normal parsing logic
No entanto, parece que quando a lógica de nova tentativa é chamada e uma nova solicitação é emitida, as páginas e os links que elas contêm não são rastreados ou raspados. Meu pensamento era que, usandoself.parse
que o CrawlSpider usa para aplicar as regras de rastreamento edont_filter=True
, Eu poderia evitar o filtro duplicado. No entanto, comDUPEFILTER_DEBUG = True
, Posso ver que as solicitações de nova tentativa são filtradas.
Estou faltando alguma coisa ou existe uma maneira melhor de lidar com isso? Gostaria de evitar a complicação de fazer renderização js dinâmica usando algo como splash, se possível, e isso só acontece de forma intermitente.