ADVERTENCIA: Esta respuesta fue para Scrapy v0.7, spider manager api ha cambiado mucho desde entonces.
Anulación de clase SpiderManager defecto, cargar sus reglas personalizadas a partir de una base de datos o en otro lugar y instanciate una araña personalizado con sus propias reglas/expresiones regulares y nombre_de_dominio
en MyBot/settings.py:
SPIDER_MANAGER_CLASS = 'mybot.spidermanager.MySpiderManager'
en MyBot/spidermanager.py:
from mybot.spider import MyParametrizedSpider
class MySpiderManager(object):
loaded = True
def fromdomain(self, name):
start_urls, extra_domain_names, regexes = self._get_spider_info(name)
return MyParametrizedSpider(name, start_urls, extra_domain_names, regexes)
def close_spider(self, spider):
# Put here code you want to run before spiders is closed
pass
def _get_spider_info(self, name):
# query your backend (maybe a sqldb) using `name` as primary key,
# and return start_urls, extra_domains and regexes
...
return (start_urls, extra_domains, regexes)
y ahora la clase de araña costumbre, en MyBot/spider.py:
from scrapy.spider import BaseSpider
class MyParametrizedSpider(BaseSpider):
def __init__(self, name, start_urls, extra_domain_names, regexes):
self.domain_name = name
self.start_urls = start_urls
self.extra_domain_names = extra_domain_names
self.regexes = regexes
def parse(self, response):
...
Notas:
- Puede extender CrawlSpider también si usted desea tomar ventaja de su sistema de reglas
- para ejecutar un uso araña:
./scrapy-ctl.py crawl <name>
, donde name
se pasa a SpiderManager.fromdomain y es la clave para recuperar más información spider del sistema backend
- Como la solución anula el SpiderManager predeterminado, la codificación de una araña clásica (un módulo python por SPIDER) no funciona, pero creo que esto no es un problema para usted.Más información sobre el gestor de arañas por defecto TwistedPluginSpiderManager
@Christian rezar: ¿No era aceptable para las respuestas a su pregunta? – dangra