Scrapy 使用相同的spider来解析详细信息页面和分页页面

Scrapy 使用相同的spider来解析详细信息页面和分页页面,scrapy,scrapy-spider,Scrapy,Scrapy Spider,我有一个刮板,使用链接提取器通过分页和解析详细页面,一切正常。示例代码如下: class SampleSpider(CrawlSpider): name = 'sample' start_urls = ['https://www.some-pagination-page.com'] rules = ( Rule(LinkExtractor(restrict_xpaths='//*[contains(@class, "paging-next")]')),

我有一个刮板,使用链接提取器通过分页和解析详细页面,一切正常。示例代码如下:

class SampleSpider(CrawlSpider):
    name = 'sample'
    start_urls = ['https://www.some-pagination-page.com']

    rules = (
        Rule(LinkExtractor(restrict_xpaths='//*[contains(@class, "paging-next")]')),
        Rule(LinkExtractor(restrict_xpaths='//*[contains(@class, "b-button_primary")]'), callback='parse_item'),
    )

    def parse_item(self, response):
      #Code block related to the parsing of item ...
      return item
现在,我想使用同一个爬行器直接解析细节页面,而无需分页。。。 基本上,我想将这个spider与scrapyrt一起使用,我想发送一个参数,指示这是一个详细页面,详细页面作为start_url, 这样我就可以直接解析该页面并快速返回结果。 目前,我已经解决了复制此爬虫并仅删除规则提取器的问题,方法如下:

class SampleSpider(scrapy.Spider):
    name = 'sample'
    start_urls = ['https://www.some-details-page.com']

    def parse(self, response):
      #Code block related to the parsing of item ...
      return item
为了避免代码重复,我如何修改spider,使其既可以与分页开始url一起使用,也可以将单个详细信息页面作为开始url一起使用

是否可以只禁用规则?
最好的方法是什么

我不知道这是否是最好的主意,但我通过重写
start\u请求
并根据spider参数指定要使用的回调:

class MySpider(CrawlSpider):
    ...

    def start_requests(self):
        if getattr(self, 'url'):
            yield Request(
                url=self.url, 
                callback=getattr(self, getattr('callback', 'parse_item'))
            )
        else:
            for url in self.start_urls:
                yield Request(url)
这样,您可以在调用spider时指定
url
参数(以及
callback
方法,默认为
parse_item
):

如果不是,它将作为一个普通的
爬行爬行器
,因为
解析
方法是
请求
的默认回调,
解析
方法是负责编译
规则
的方法

scrapy crawl myspider url="http://myurl" callback="parse_item"