Reglas dinámicas basadas en start_urls para Scrapy CrawlSpider?

Estoy escribiendo un raspador Scrapy que usa CrawlSpider para rastrear sitios, revisar sus enlaces internos y raspar el contenido de cualquier enlace externo (enlaces con un dominio diferente del dominio original).

Logré hacerlo con 2 reglas, pero se basan en el dominio del sitio que se rastrea. Si quiero ejecutar esto en varios sitios web, me encuentro con un problema porque no sé en qué "start_url" estoy actualmente, por lo que no puedo cambiar la regla adecuadamente.

Esto es lo que se me ocurrió hasta ahora, funciona para un sitio web y no estoy seguro de cómo aplicarlo a una lista de sitios web:

class HomepagesSpider(CrawlSpider):
    name = 'homepages'

    homepage = 'http://www.somesite.com'

    start_urls = [homepage]

    # strip http and www
    domain = homepage.replace('http://', '').replace('https://', '').replace('www.', '')
    domain = domain[:-1] if domain[-1] == '/' else domain

    rules = (
        Rule(LinkExtractor(allow_domains=(domain), deny_domains=()), callback='parse_internal', follow=True),
        Rule(LinkExtractor(allow_domains=(), deny_domains=(domain)), callback='parse_external', follow=False),
    )

    def parse_internal(self, response):

        # log internal page...

    def parse_external(self, response):

        # parse external page...

Probablemente esto se pueda hacer simplemente pasando start_url como argumento al llamar al scraper, pero estoy buscando una manera de hacerlo mediante programación dentro del scraper.

¿Algunas ideas? ¡Gracias!

Simon

Respuestas a la pregunta(2)

Su respuesta a la pregunta