scrapy调用parse()和parse()调用func()的方法
这篇“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
yieldyield 的作用就是把一个函数变成一个生成器(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()的方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。