Python 避免重复的多级解析模式

Python 避免重复的多级解析模式,python,scrapy,Python,Scrapy,我正在浏览电子零售商店的分类。通常情况下,有一个类别链接,我按照它来获得该类别中的产品列表。但是有些类别有附加的子类别,所以我有一个附加的解析方法来检查情况是否如此 为了表示问题,parse生成一个请求,由parse_第二次回调检查该请求。如果parse_second的响应是一个category页面,它会在生成parse_second的请求之前进行一些额外的处理,否则它只会将响应转发给parse_second def parse(self, response): ... yiel

我正在浏览电子零售商店的分类。通常情况下,有一个类别链接,我按照它来获得该类别中的产品列表。但是有些类别有附加的子类别,所以我有一个附加的解析方法来检查情况是否如此

为了表示问题,parse生成一个请求,由parse_第二次回调检查该请求。如果parse_second的响应是一个category页面,它会在生成parse_second的请求之前进行一些额外的处理,否则它只会将响应转发给parse_second

def parse(self, response):
    ...
    yield Request(some_url, callback=self.parse_second)

def parse_second(self, response):
    ...
    #check if category page or listing page
    if is_category_page:
        #do some processing to get new_url
        yield Request(new_url, callback=self.parse_third)

    else:
         #just forward the previous request to a new callback
         yield Request(response.url, callback=self.parse_third)

def parse_third(self, response):
    ...
因此,许多请求没有在
parse_second
中处理,因为它们是重复的,即它们已经被
parse_second
回调爬网


我相信我可以在请求对象中设置param
dont_filter=True
,但它听起来更像一个补丁。有没有一个好的或公认的方法来避免这个问题?我相信这一定是一种常见的模式。

您可以直接调用
parse_xxx()
,而不是
yield Request()


dont\u filter=True
正确

即使查看并更改指纹设置为“是/否”的方式,这也是重复的,也无法解决您的问题


允许重复项=#个允许重复项可能很方便

我不明白。你能解释一下吗?@pad你不需要
发出请求
,就可以得到你已经得到的
响应
def parse(self, response):
    ...
    for i in self.parse_second(response):
        yield i