在python中动态设置Crawler规则

时间:2018-11-01 17:29:19

标签: python python-3.x

我正在使用Scrapy设置搜寻器,并希望能够基于蜘蛛中的变量动态设置规则。我的代码是这样的:

class MainSpider(CrawlSpider):
  def __init__(self, configuration):
    super(MainSpider, self).__init__(configuration.name)
    dispatcher.connect(self.spider_closed, signals.spider_closed)
    self.product_link_id = configuration.product_link_id

  rules = (
    # call parse_link on all links from starting url
    Rule(LinkExtractor(allow=product_link_id), callback='parse_link', follow=False),)

如您所见,我正在尝试在其中使用实例变量,该变量不起作用。我可以肯定地说,这是因为我的代码存在一个基本的Python问题,与Scrapy无关,但不确定是什么,因为我是Python的新手。

1 个答案:

答案 0 :(得分:0)

我需要在类的顶部(在构造函数之外)定义变量,以便可以由规则选择它。像这样:

class MainSpider(CrawlSpider):
   product_link_id = None
   def __init__(self, configuration):
   ....
   rules = (Rule(LinkExtractor(allow=product_link_id), callback='parse_link', follow=False),)