scrapy BaseSpider类是否具有“规则”选项

时间:2012-12-15 08:59:08

标签: python scrapy

我已经看到很多关于人们在询问何时从BaseSpider继承的问题 或者InitSpider。

Setting sticky cookie in scrapy

class TestSpider(InitSpider):
    ...
    rules = (Rule(SgmlLinkExtractor(allow=('products/./index\.html', )), callback='parse_page'),)

    def init_request(self):
        return Request(url = self.init_url, callback=self.parse_js)

现在我已经看到BaseSPider没有任何"规则"选择,但人们仍在写这个。

我想知道我是不是错了

我还没有看到任何高级成员在这个问题中提到这个问题

1 个答案:

答案 0 :(得分:0)

根据不同类型蜘蛛的源代码,我们可以得出以下结论:

实施规则:

  • CrawlSpider(规则类从第17行到第28行定义,并作为数据成员添加到第32行的CrawlSpider类中)

不实施规则:

如果由于有人在CrawlSpider之外的蜘蛛中定义规则的所有示例而您不相信这一点,您可以通过创建引用callback1并在其中声明的规则来测试这一点。 callback1符合以下几行:

print "We're in callback1 so the rule must work"

如果在运行非CrawlSpider蜘蛛时看到该语句,则表示已实施规则。