我正在尝试使用tweepy从twitter api收集大量tweets。我有一个文本文件,包含大约一万个tweet id。我的程序读取文件,抓取每个tweet,以及它正在回复的tweet。然后,它将每条tweet的文本以及每个作者的用户名保存在各自的文本文件中。代码如下:
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()
但是,在一段时间内一切正常,然后我得到以下错误:
^{pr2}$有什么问题吗? 谢谢。在
我能读懂的最好的是,一个读错误会让你陷入无限递归,因为每个例程都会调用另一个例程。如果获取下一行并没有使您脱离错误条件,那么您将在不到一秒钟的时间内超过堆栈限制。在
如果没有其他内容,请快速检查几条打印语句:在遇到tweetID时将其打印出来,并标记为识别打印的位置。直接修复很可能包括编写第二个例程来获取原始tweet,而不具备重现的能力。这假设您只需要当前tweet的直接父级,而不是整个链。在
你只能递归地调用一个函数999次之后,你得到了那个错误。您可以改为使用条件语句从函数外部调用或创建生成器。在
相关问题 更多 >
编程相关推荐