У меня есть веб-сайт, для которого мой сканер должен следовать последовательности. Так, например, ему нужно пройти a1, b1, c1, прежде чем он начнет идти a2 и т. Д. Каждый из a, b и c обрабатывается различными функциями синтаксического анализа, и соответствующие URL-адреса создаются в объекте Request и выдаются. Следующий пример примерно иллюстрирует код, который я использую:
class aspider(BaseSpider):
def parse(self,response):
yield Request(b, callback=self.parse_b, priority=10)
def parse_b(self,response):
yield Request(c, callback=self.parse_c, priority=20)
def parse_c(self,response)
final_function()
Однако я обнаружил, что последовательность обходов выглядит как a1, a2, a3, b1, b2, b3, c1, c2, c3, что странно, поскольку я думал, что Scrapy должен сначала гарантировать глубину.
Последовательность не обязательно должна быть строгой, но у сайта, который я очищаю, есть ограничение, поэтому Scrapy нужно начинать очистку уровня c, как только это будет возможно, прежде чем 5 уровня bs будут сканированы. Как этого достичь?