美文网首页
报错:TypeError: Object of type 'Ob

报错:TypeError: Object of type 'Ob

作者: 越大大雨天 | 来源:发表于2019-08-19 17:13 被阅读0次

    在爬虫中使用MongoDB保存数据时可能遇到这个错误,虽然不会影响数据的写入,但是在终端显示时会一直不断报这个错误。

    报错原因

    造成改问题的原因是数据在写入MongoDB的时候,即使你没有指定_id字段,也会为每一行数据自动生成一个_id字段,而这个_id字段的类型如我截图所示:


    image.png

    该字段为ObjectId类型,不能使用Json序列化返回,因此解释器中不断报错。

    解决办法

    既然_id字段不能被转换,也对我们实际数据没什么作用,那就不让它显示就行了。
    在pipeline的process_item(self, item, spider)方法中我们是直接return的item,item中已经包括了自动生成的_id字段,因此,在return之前,删除_id字段即可,如下:

        def process_item(self, item, spider):
            if spider.name == 'book':
                item = dict(item)
                self.collection.insert(item)
                # 此时item对象必须是一个字典,再插入
                # 如果此时item是BaseItem则需要先转换为字典:dict(BaseItem)
            item.pop("_id")
            return item
    

    使用pop先弹出_id字段,再返回。重新运行程序,不再报错。

    除了scrapy中可能遇到该问题,在其他序列化返回MongoDB数据的地方也可能会遇到这样的报错,解决方法都可以通用。

    相关文章

      网友评论

          本文标题:报错:TypeError: Object of type 'Ob

          本文链接:https://www.haomeiwen.com/subject/brdesctx.html