代码之家  ›  专栏  ›  技术社区  ›  djames

PyMongo集合对象不可调用

  •  2
  • djames  · 技术社区  · 8 年前

    我正在尝试创建一个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()
    
    1 回复  |  直到 3 年前
        1
  •  6
  •   user2566987    8 年前

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

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

    import pymongo
    pymongo.version
    

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

    threads.insert(data)
    

    有关详细信息,请参阅 pymongo 2.8 documentation