चेतावनी: यह जवाब Scrapy v0.7 के लिए था, मकड़ी प्रबंधक API एक बहुत तब से बदल दिया है।
अवहेलना डिफ़ॉल्ट SpiderManager वर्ग, कहीं और किसी डेटाबेस से अपने कस्टम नियमों लोड या और अपने खुद के नियमों/regexes के साथ एक कस्टम मकड़ी instanciate और DOMAIN_NAME
mybot में
/settings.py:
SPIDER_MANAGER_CLASS = 'mybot.spidermanager.MySpiderManager'
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)
और अब अपने कस्टम मकड़ी वर्ग, 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):
...
नोट्स:
- आप CrawlSpider भी विस्तार कर सकते हैं यदि आप अपने नियम प्रणाली का लाभ लेने के
- एक मकड़ी उपयोग को चलाने के लिए चाहते हैं:
./scrapy-ctl.py crawl <name>
, जहां name
SpiderManager.fromdomain को पारित कर दिया है और बैकएंड प्रणाली
- से अधिक मकड़ी की जानकारी नहीं निकाला जा समाधान डिफ़ॉल्ट SpiderManager ओवरराइड करता है के रूप में, एक क्लासिक मकड़ी (मकड़ी प्रति एक अजगर मॉड्यूल) कोडिंग कुंजी है मुझे लगता है कि यह आपके लिए कोई मुद्दा नहीं है नहीं है काम करता है, लेकिन,।डिफ़ॉल्ट मकड़ियों प्रबंधक पर अधिक जानकारी TwistedPluginSpiderManager
@Christian Daven: अपने प्रश्न के लिए उत्तर स्वीकार्य नहीं था? – dangra