这篇“scrapy调用parse()和parse()调用func()的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“scrapy调用parse()和parse()调用func()的方法”文章吧。

在scrapy中调用parse()方法,parse()方法中调用其他函数func(),func需要返回Item,使用方法如下:

#在parse()中调用其他yield函数,需要写成写成循环并yield其中的内容

defparse():

#正确调用

foriteminparse_comment(a,b):

yielditem

#错误调用,无法得到数据

parse_comment(a,b)

defparse_comment(a,b):

forainb:

yieldc

yield

yield 的作用就是把一个函数变成一个生成器(generator),带有yield的函数不再是一个普通函数.Python解释器会将其视为一个generator,单独调用(如fab(5))不会执行fab函数,而是返回一个 iterable 对象!

在for循环执行时,每次循环都会执行fab函数内部的代码,执行到yield b时,fab函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。

结论:yield要使用在循环中,这样生成器才有使用的意义。

deffab(max):

n,a,b=0,0,1

whilen<max:

#printb

yieldb

#printb

a,b=b,a+b

n=n+1

print(fab(5))#输出:<generatorobjectfabat0x00000000069D8A68>

forninfab(5):

printn#依次1,1,2,3,5

#对于含有yield的函数,外部要以迭代的方式调用,当函数执行结束时,generator自动抛出StopIteration异常,表示迭代完成。

#在for循环里,无需处理StopIteration异常,循环会正常结束。

defff(max):

a,b=0,1

yieldmax#yield不在循环中,这里已经到函数最后所以直接返回,相当于return

forninff(5):

printn#输出:5

以上就是关于“scrapy调用parse()和parse()调用func()的方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。