gpt4 book ai didi

python - 用scrapy写一个spider,但是为什么 'yield item'不能在嵌套的for循环中工作?

转载 作者:行者123 更新时间:2023-12-01 00:24:45 25 4
gpt4 key购买 nike

我有一个用 scrapy 编写的蜘蛛,但 yiled 项目未在 for 循环中执行,请参阅下面的代码。

def parse_paragraph(self, div_list, category_name, group_name):
for div in div_list:
duilian_text_list = div.xpath('./text()').extract()
duilian_text_list = strip_list(duilian_text_list)
if len(duilian_text_list) == 0:
continue
elif len(duilian_text_list) == 1:
duilian_text = duilian_text_list[0]
self.parse_duilian(duilian_text, category_name, group_name)
elif len(duilian_text_list) == 2 and not is_single_line(duilian_text_list[0]):
duilian_text = ''.join(duilian_text_list)
self.parse_duilian(duilian_text, category_name, group_name)
else:
for duilian_text in duilian_text_list:
duilian_item = DuilianItem()
duilian_item['id'] = str(uuid.uuid4()).replace('-', '')
duilian_item['category_id'] = getCategoryName(category_name)
duilian_item['group_name'] = group_name
duilian = parse_duilian(duilian_text)
if duilian != '|':
duilian_item['name'] = duilian
duilian_item['desc'] = ''
duilian_item['author'] = ''
duilian_item['shuti'] = ''
duilian_item['word_count'] = len(duilian_item['name']) // 2
duilian_item['image_url'] = ''
print('-------I am here--------')
yield duilian_item

当我调用这个函数时,我在输出窗口中什么也没有得到,看起来yiled duilian_item行不起作用,它甚至阻止其他代码执行(上面的打印行)。

当我注释掉最后一行yiled duilian_item时,一切正常,我得到--------我在这里-------- 在输出窗口中,这里出了什么问题?

简单地说,下面的代码什么也不打印,但是如果我注释掉yiled 1,它会打印列表,所以Python中的yield在for循环中不起作用?

def strange_yield():
list = [1, 2, 3]
for i in list:
print(i)
yield 1

strange_yield()

最佳答案

当你在Python函数中使用yield时,该函数就变成了生成器函数。在您的 strange_yield 函数之后处理它的正确方法是:

my_yield = strange_yield()

my_yield 现在是生成器函数 strange_yield 的实例。生成器函数可以迭代,也可以使用 next() 函数获取下一个值:

print(next(my_yield))

for yield_value in my_yield:
print(yield_value)

关于python - 用scrapy写一个spider,但是为什么 'yield item'不能在嵌套的for循环中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58681882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com