【问题标题】:PyMongo Collection Object Not CallablePyMongo 集合对象不可调用
【发布时间】:2016-06-09 01:24:06
【问题描述】:

我正在尝试创建一个 Reddit 抓取工具,它从 Reddit 主页获取前 100 个页面并将它们存储到 MongoDB 中。我不断收到错误:

TypeError: 'Collection' object is not callable. If you meant to call the 'insert_one' method on a 'Collection' object it is failing because no such method exists.

这是我的代码

import pymongo
import praw
import time


def main():
    fpid = os.fork()
    if fpid!=0:
        # Running as daemon now. PID is fpid
        sys.exit(0)

    user_agent = ("Python Scraper by djames v0.1")
    r = praw.Reddit(user_agent = user_agent)    #Reddit API requires user agent

    conn=pymongo.MongoClient()
    db = conn.reddit
    threads = db.threads


    while 1==1:    #Runs in an infinite loop, loop repeats every 30 seconds
        frontpage_pull = r.get_front_page(limit=100)    #get first 100 posts from reddit.com

        for posts in frontpage_pull:    #repeats for each of the 100 posts pulled
            data = {}
            data['title'] = posts.title
            data['text'] = posts.selftext
            threads.insert_one(data)
        time.sleep(30)

if __name__ == "__main__":
    main()

【问题讨论】:

  • 顺便说一句,你可以说while 1:而不是while 1==1:

标签: python mongodb python-2.7 pymongo


【解决方案1】:

insert_one() 直到 3.0 版才添加到 pymongo。如果您尝试在此之前的版本上调用它,您将收到您所看到的错误。

要检查您的 pymongo 版本,请打开 python 解释器并输入:

import pymongo
pymongo.version

使用 pymongo 插入文档的传统方式只是使用 Collection.insert()。因此,在您的情况下,您可以将插入行更改为:

threads.insert(data)

欲了解更多信息,请参阅pymongo 2.8 documentation

【讨论】:

  • 就是这样。谢谢!
猜你喜欢
  • 2015-05-12
  • 2016-05-16
  • 2015-02-11
  • 2022-07-05
  • 2012-03-10
  • 2020-01-21
  • 2012-04-05
  • 2018-02-09
  • 1970-01-01
相关资源
最近更新 更多