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