2016-02-26 42 views
1

我正在尝试创建一个reddit刮取器,它从reddit主页获取前100页,并将它们存储到MongoDB中。这是我在stackoverflow上的第一篇文章,所以如果我的文章格式不正确,我很抱歉。我不断收到错误:PyMongo集合对象不可Callable

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() 
+0

顺便说一句,你可以说'而1:'来代替'而1 == 1:' 。 – zondo

回答

2

insert_one()没有添加到pymongo直到3.0版本。如果您之前尝试在某个版本上调用它,则会看到您所看到的错误。

要检查你pymongo的版本,打开了Python解释器,然后输入:

import pymongo 
pymongo.version 

与pymongo插入文档的传统方式是只是Collection.insert()。所以你的情况,你可以改变你的插入线:

threads.insert(data) 

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

+0

就是这样。谢谢! – djames