scrapy start_request可以不生产或退货吗?

wgx48brx  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(139)

我有一个scraper,我想在调用http请求和解析之前检查url。url可能是None,因为它是调用的一个输入参数:

def start_requests(self):
    # url as input to system

    if url:
        yield scrapy.Request(url, callback=self.parse)

在文档中,start_request函数必须返回一个Requests的可迭代对象。如果urlNone,上面的代码可以工作,但不返回任何项。这对scrapy来说是个坏习惯吗?

nr7wwzry

nr7wwzry1#

斯凯里用它做的是

start_requests = iter(self.spider.start_requests())

它的工作原理是yield关键字。这将返回类型更改为生成器,所以即使url为None,也会返回空生成器,这就是它工作的原因(而且非常好)。但是要小心,如果你决定使用list:

def start_requests(self):
    # url as input to system

    if url:
        return [scrapy.Request(url, callback=self.parse)]

它会碎的。

相关问题