¿Cómo utilizar scrapy para rastrear varias páginas?

Todos los ejemplos que encontré de Scrapy hablan sobre cómo rastrear una sola página, páginas con el mismo esquema de URL o todas las páginas de un sitio web. Necesito rastrear series de páginas A, B, C donde en A tienes el enlace a B, etc. Por ejemplo, la estructura del sitio web es:

A ----> B ---------> C D E 

Necesito rastrear todas las páginas C, pero para obtener un enlace a C, debo rastrear antes de A y B. ¿Alguna sugerencia?

vea la estructura de Solicitud de chatarra , para rastrear dicha cadena tendrá que usar el parámetro de callback como el siguiente:

 class MySpider(BaseSpider): ... # spider starts here def parse(self, response): ... # A, D, E are done in parallel, A -> B -> C are done serially yield Request(url=, ... callback=parseA) yield Request(url=, ... callback=parseD) yield Request(url=, ... callback=parseE) def parseA(self, response): ... yield Request(url=, ... callback=parseB) def parseB(self, response): ... yield Request(url=, ... callback=parseC) def parseC(self, response): ... def parseD(self, response): ... def parseE(self, response): ... 

Aquí hay un ejemplo de araña que escribí para un proyecto mío:

 from scrapy.contrib.spiders import CrawlSpider from scrapy.selector import HtmlXPathSelector from scrapy.http import Request from yoMamaSpider.items import JokeItem from yoMamaSpider.striputils import stripcats, stripjokes import re class Jokes4UsSpider(CrawlSpider): name = 'jokes4us' allowed_domains = ['jokes4us.com'] start_urls = ["http://www.jokes4us.com/yomamajokes/"] def parse(self, response): hxs = HtmlXPathSelector(response) links = hxs.select('//a') for link in links: url = ''.join(link.select('./@href').extract()) relevant_urls = re.compile( 'http://www\.jokes4us\.com/yomamajokes/yomamas([a-zA-Z]+)') if relevant_urls.match(url): yield Request(url, callback=self.parse_page) def parse_page(self, response): hxs = HtmlXPathSelector(response) categories = stripcats(hxs.select('//title/text()').extract()) joke_area = hxs.select('//p/text()').extract() for joke in joke_area: joke = stripjokes(joke) if len(joke) > 15: yield JokeItem(joke=joke, categories=categories) 

Creo que el método de análisis es lo que está buscando: examina todos los enlaces de la página start_urls, luego usa alguna expresión regular para decidir si es un URL_ relevante (es decir, una URL que me gustaría eliminar), si es relevante. raspa la página utilizando la solicitud de rendimiento (url, callback = self.parse_page), que llama al método parse_page.

¿Es este el tipo de cosa que buscas?