WARNUNG: Diese Antwort war für Scrapy v0.7, Spider Manager API hat sich seitdem sehr geändert.
außer Kraft setzen Standard SpiderManager Klasse, laden Sie Ihre benutzerdefinierten Regeln aus einer Datenbank oder sonstwo und instanziiert eine eigene Spinne mit Ihren eigenen Regeln/reguläre Ausdrücke und domain_name
in mybot/settings.py:
SPIDER_MANAGER_CLASS = 'mybot.spidermanager.MySpiderManager'
in 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)
und jetzt Klasse Ihrer individuellen Spinne, in 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):
...
Hinweise:
- Sie können CrawlSpider verlängern, wenn Sie die Vorteile seiner Geschäfts System
- nehmen wollen eine Spinne Verwendung auszuführen:
./scrapy-ctl.py crawl <name>
, wo name
zu SpiderManager.fromdomain geleitet wird und ist der Schlüssel, um mehr Spider-Informationen aus dem Backend-System zu retriezen
- Als Lösung überschreibt Standard-SpiderManager, Codierung ein klassisches Spider (ein Python-Modul pro SPIDER) funktioniert nicht, aber ich denke, das ist kein Problem für Sie.Weitere Informationen über Standard-Spinnen-Manager TwistedPluginSpiderManager
@Christian Daven: War nicht die Antworten für Ihre Frage akzeptabel? – dangra