在Scrapy中,如何编写两个解析方式相同的爬虫而不重复代码?

In Scrapy, how to write two spiders with the same parse method without code repetition?

我想用不同的 start_requests methods, but exactly the same parse 方法在 Scrapy 中编写两个蜘蛛。但是,由于 parse 是一个实例方法,我不确定如何在不简单地复制粘贴所有代码的情况下将它从一个蜘蛛 'copy' 传递到另一个蜘蛛。我该怎么做?

您可以像在任何其他情况下一样使用继承:

class BaseSpider(scrapy.Spider):

    def parse(self, request):
        pass # Common parse code

class SpiderOne(BaseSpider):

    def start_requests(self):
        pass # Code for this spider

class SpiderTwo(BaseSpider):

    def start_requests(self):
        pass # Code for other spider

任何方法的功能都类似于fun(the_self, other_args...)。因此,您可以将通用代码实现为带有 self 参数但在任何 类 之外的函数。然后通过将此 self 作为第一个参数传递来调用它。