我正在遵循基本的Scrapy教程,并且对Python有一定的经验。这似乎是一个递归函数,我对正在发生的事情有一些疑问。
这在Scrapy教程中:https://doc.scrapy.org/en/latest/intro/tutorial.html
当我指定callback=self.parse
并将其省略时,它的运行方式相同。
这是代码(最后一行是我的问题来自哪里):
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').extract_first(),
'author': quote.css('small.author::text').extract_first(),
'tags': quote.css('div.tags a.tag::text').extract(),
}
next_page = response.css('li.next a::attr(href)').extract_first()
if next_page is not None:
next_page = response.urljoin(next_page)
yield scrapy.Request(next_page, callback=self.parse)
当我省略callback=self.parse
并将其留在其中时,该函数的性能相同。
此回调是隐式的,不是必需的吗?您是否有理由要在那里存放它?
谢谢。
答案 0 :(得分:1)
您链接的文档说明了A shortcut to the start_requests method部分中发生的情况:
parse()
是Scrapy的默认回调方法,对于没有明确分配回调的请求会被调用
粗略的教程仅显示了基本方法,然后尝试使您轻松使用替代方法。