我发现一个很坑的BUG

发布于 2022-09-04 20:39:33 字数 781 浏览 9 评论 0

问题在于 self.crawl(url, save=saveItem)
中, 如果saveItem变态提前定义, 而你又有一批抓取动作, 例如:

for i in range(10):
   self.crawl(url, save={'a':i})

结果是 所有抓取结果都是 sefl.crawl(url, save={'a':9}

请看实例:

图片描述
结果是:
图片描述

非要这样才会正常。
图片描述


图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

梦断已成空 2022-09-11 20:39:33

很明显你的self.crawl是一个异步方法,等到执行完以后去看save参数的时候,save里面的i已经变成了最后一个i的值,解决方法很多。比如你可以利用lambda拷贝一下tid的值:

(lambda _tid: self.crawl(url, callback=self.detail_page, save=resoponse.save.update({'tid': _tid})))(tid)
樱花坊 2022-09-11 20:39:33

你的代码和

for i in range(10):
   self.crawl(url, save={'a':i})

不同,你传给 self.crawl 的都是同一个 save 对象,然后你修改了 save 对象的内容,它们最终当然是一样的了。

迷路的信 2022-09-11 20:39:33

你用浅拷贝试试。
save = copy.copy(response.save)

百善笑为先 2022-09-11 20:39:33

上面改过的也不对啊

泪眸﹌ 2022-09-11 20:39:33

你传给 self.crawl 的都是同一个 save 对象,save = copy.deepcopy(save)即可

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文