gpt4 book ai didi

python - Scrapy中如何控制yield的顺序

转载 作者:太空宇宙 更新时间:2023-11-03 11:48:22 25 4
gpt4 key购买 nike

帮助!阅读下面的scrapy代码和爬虫的结果。我想从 http://china.fathom.info/data/data.json 中抓取一些数据,并且只允许使用 Scrapy。但是我不知道如何控制产量的顺序。我期待在循环中处理所有 parse_member 请求,然后返回 group_item,但似乎 yield item 总是在 yield 请求之前执行。

start_urls = [
"http://china.fathom.info/data/data.json"
]

def parse(self, response):
groups = json.loads(response.body)['group_members']
for i in groups:
group_item = GroupItem()
group_item['name'] = groups[i]['name']
group_item['chinese'] = groups[i]['chinese']
group_item['members'] = []

members = groups[i]['members']
for member in members:
yield Request(self.person_url % member['id'], meta={'group_item': group_item, 'member': member},
callback=self.parse_member, priority=100)
yield group_item

def parse_member(self, response):
group_item = response.meta['group_item']
member = response.meta['member']
person = json.loads(response.body)
ego = person['ego']
group_item['members'].append({
'id': ego['id'],
'name': ego['name'],
'chinese': ego['chinese'],
'role': member['role']
})

Data on MongoDB

最佳答案

您需要在最终回调中生成该项目,parse 不会停止以等待 parse_member 完成,因此 group_itemparseparse_member 工作时没有改变。

不要产生 parsegroup_item,只产生 parse_member 上的那个,因为你已经复制了 上的前一个项目meta 并且您已经使用 response.meta['group_item']

parse_member 上恢复了它

关于python - Scrapy中如何控制yield的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33875339/

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