我正在尝试使用 R 中的 twitteR 包从 Haaretz Twitter feed (@haaretzcom) 下载所有关注者及其信息(位置、创建日期等)。Twitter feed 有超过 90,000 个关注者能够使用下面的代码下载完整的关注者列表没有问题。
require(twitteR)
require(ROAuth)
#Loading the Twitter OAuthorization
load("~/Dropbox/Twitter/my_oauth")
#Confirming the OAuth
registerTwitterOAuth(my_oauth)
# opening list to download
haaretz_followers<-getUser("haaretzcom")$getFollowerIDs(retryOnRateLimit=9999999)
但是,当我尝试使用 LookupUsers 函数提取他们的信息时,我遇到了速率限制。使用 retryOnRateLimit 的技巧在这里似乎不起作用:)
#Extracting user information for each of Haaretz followers
haaretz_followers_info<-lookupUsers(haaretz_followers)
haaretz_followers_full<-twListToDF(haaretz_followers_info)
#Export data to csv
write.table(haaretz_followers_full, file = "haaretz_twitter_followers.csv", sep=",")
我相信我需要在关注者列表(haaretz_followers)上编写一个 for 循环和子样本以避免速率限制。在此循环中,我需要包括某种休息/暂停,例如 Keep downloading tweets within the limits using twitteR package 。 twitteR 包对于如何进行此操作有点不透明,而且我是在 R 中编写循环的新手。最后,我知道,根据您在 R 中编写循环的方式,会极大地影响运行时间。如果您能提供任何帮助,我们将不胜感激!
最佳答案
像这样的事情可能会完成工作:
for (follower in haaretz_followers){
Sys.sleep(5)
haaretz_followers_info<-lookupUsers(haaretz_followers)
haaretz_followers_full<-twListToDF(haaretz_followers_info)
#Export data to csv
write.table(haaretz_followers_full, file = "haaretz_twitter_followers.csv", sep=",")
}
每次通话之间您会休眠 5 秒。我不知道您的速率限制是多少 - 您可能需要或多或少地遵守 Twitter 的政策。
您认为在 R 中构建循环的方式会影响性能是正确的,但在这种情况下,您故意插入一个暂停,该暂停的时间比设计不良的循环所浪费的 CPU 时间要长几个数量级,所以你真的不需要担心这个。
关于r - 解决在 R 中使用 twitteR 包提取大量用户信息的速率限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16302232/