'RuntimeError:使用Tweepy收集推文时,cmp'超出了最大递归深度

时间:2016-03-01 17:06:48

标签: python twitter tweepy

我试图用tweepy从twitter api收集大量的推文。我有一个包含大约一万条推文ID的文本文件。我的程序读取文件,抓取每条推文,以及它回复的推文。然后,它会将每个推文的文本以及每个作者的用户名保存在相应的文本文件中。这是代码:

shape2$id <- factor(seq_len(length(shape2)))
spplot(shape2, 'id')

然而,一切正常,但我得到以下错误:

auth = tweepy.OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)

api = tweepy.API(auth)

tweetsFile = open("srcstic.txt", "r")
tweets_seen = set() # holds tweets already seen

def getNextLine():
    while True:

        tweetID = tweetsFile.readline()
        getTweetObj(tweetID)

        if not tweetID:
            break

def getTweetObj(tweetID):
    try:
        tweetObj = api.get_status(tweetID)
        #sleep(11)
    except tweepy.error.TweepError:
        getNextLine()
    else:
        pass
    tweet = tweetObj.text.encode("utf8")
    idnum = tweetObj.in_reply_to_status_id_str

    try:
        former = api.get_status(idnum)
    except tweepy.error.TweepError:
        getNextLine()
    else:
        printFiles(former, tweetObj, tweet)

def printFiles(former, tweetObj, tweet):

    callUserName = former.user.screen_name
    responseUserName = tweetObj.user.screen_name

    if tweet not in tweets_seen:

        with open("callauthors.txt", "a") as callauthors:
                cauthors = callUserName + "\n"
                callauthors.write(cauthors)

        with open("responseauthors.txt", "a") as responseauthors:
                rauthors = responseUserName + "\n"
                responseauthors.write(rauthors)

        with open("response_tweets.txt", "a") as responsetweets:
                output = (tweetObj.text.encode('utf-8')+"\n")
                responsetweets.write(output)

        with open("call_tweets.txt", "a") as calltweets:
                output = (former.text.encode('utf-8')+"\n")
                calltweets.write(output)
                tweets_seen.add(tweet)

    getNextLine()

这里有什么想法吗? 感谢。

2 个答案:

答案 0 :(得分:0)

在得到该错误后,您只能递归调用一次999次函数。您可以使用条件语句从函数外部调用或创建生成器。

答案 1 :(得分:0)

我最好能读到这个,读错误会让你进入无限递归,因为每个例程都会调用另一个例程。如果提取下一行并没有使你摆脱错误状态,你将在不到一秒的时间内超过堆栈限制。

如果不出意外,请使用几个打印语句快速检查:在遇到tweetID时打印出来,标记为识别打印位置。直接修复可能包括编写抓住原始推文的第二个例程,而不具备重复的能力。这假设您只需要当前推文的直接父级,而不是整个链。