R–;使用Twitter句柄列表上的循环来提取tweet并创建多个数据帧
我有一个由Twitter句柄组成的df,我希望定期清理它R–;使用Twitter句柄列表上的循环来提取tweet并创建多个数据帧,r,twitter,web-scraping,rtweet,R,Twitter,Web Scraping,Rtweet,我有一个由Twitter句柄组成的df,我希望定期清理它 df=data.frame(twitter_handles=c("@katyperry","@justinbieber","@Cristiano","@BarackObama")) 我的方法学 我想运行一个for循环,该循环在我的df中的每个句柄上循环,并创建多个数据帧: 1) 通过使用rtweet库,我想使用search\u tweets功能收集tweets 2) 然后,我想将每个数据帧的新tweet合并到现有tweet,然后使用un
df=data.frame(twitter_handles=c("@katyperry","@justinbieber","@Cristiano","@BarackObama"))
我的方法学
我想运行一个for
循环,该循环在我的df中的每个句柄上循环,并创建多个数据帧:
1) 通过使用rtweet
库,我想使用search\u tweets
功能收集tweets
2) 然后,我想将每个数据帧的新tweet合并到现有tweet,然后使用unique
功能删除任何重复的tweet
3) 对于每个数据帧,我想添加一列,其中包含用于获取数据的Twitter句柄的名称。例如:对于使用handle@BarackObama获得的tweet数据库,我想使用handle@BarackObama添加一个名为Source
的列
4) 如果API返回0条推文,我希望忽略步骤2)。通常,当API返回0条tweet时,当它试图将空数据帧与现有数据帧合并时,我会收到一个错误
5) 最后,我想将每次刮取的结果保存到不同的dataframe对象。每个dataframe对象的名称都是它的Twitter句柄,小写,不带@
我想要的输出
library(rtweet)
library(ROAuth)
#Accessing Twitter API using my Twitter credentials
key <-"yKxxxxxxxxxxxxxxxxxxxxxxx"
secret <-"78EUxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
setup_twitter_oauth(key,secret)
#Dataframe of Twitter handles
df=data.frame(twitter_handles=c("@katyperry","@justinbieber","@Cristiano","@BarackObama"))
# Setting up the query
query <- as.character(df$twitter_handles)
query <- unlist(strsplit(query,","))
tweets.dataframe = list()
# Loop through the twitter handles & store the results as individual dataframes
for(i in 1:length(query)){
result<-search_tweets(query[i],n=10000,include_rts = FALSE)
#Strip tweets that contain RTs
tweets.dataframe <- c(tweets.dataframe,result)
tweets.dataframe <- unique(tweets.dataframe)
}
我想要的输出是4个数据帧,katyperry
,justinbieber
,cristiano
和barackobama
我的尝试
library(rtweet)
library(ROAuth)
#Accessing Twitter API using my Twitter credentials
key <-"yKxxxxxxxxxxxxxxxxxxxxxxx"
secret <-"78EUxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
setup_twitter_oauth(key,secret)
#Dataframe of Twitter handles
df=data.frame(twitter_handles=c("@katyperry","@justinbieber","@Cristiano","@BarackObama"))
# Setting up the query
query <- as.character(df$twitter_handles)
query <- unlist(strsplit(query,","))
tweets.dataframe = list()
# Loop through the twitter handles & store the results as individual dataframes
for(i in 1:length(query)){
result<-search_tweets(query[i],n=10000,include_rts = FALSE)
#Strip tweets that contain RTs
tweets.dataframe <- c(tweets.dataframe,result)
tweets.dataframe <- unique(tweets.dataframe)
}
库(rtweet)
图书馆(ROAuth)
#使用我的Twitter凭据访问Twitter API
keytweets.dataframe=list()
#循环遍历twitter句柄并将结果存储为单个数据帧
用于(i/1:长度(查询)){
结果0){#仅当结果有数据时
tweets.dataframe没有任何tweet时,结果的数据类型是什么?如果其data.frame则If(nrow(result)==0)下一步
可能会有帮助。你说的LargeList是指不太可能,因为package没有使用它,数据类型是一个空的数据帧。是的,它看起来像一个大列表,但我确信我的for循环需要某种修改,以使结果有意义。谢谢。尽管此
for循环似乎没有向exi添加新的tweetsting单个数据帧。我已经使用min()
和max()对此进行了测试
在
变量处创建的函数。是否有办法确保每次重新运行此循环时,只添加新的推文,而保留现有的推文?此外,我对我的问题进行了一个小编辑,并在我的方法中添加了步骤3。如果您能在这方面提供指导,我将不胜感激。谢谢。您没有详细信息ny“现有单个数据帧”…它们是什么/在哪里?当我说现有的数据帧时,我的意思是,对于循环的未来重新运行,我希望将新的tweet添加到在上一次迭代中收集的tweet的数据帧中。因此,每次我重新运行循环并收集最新的tweet时,我的数据帧中的行数应该大于循环中的行数重新运行循环之前的dataframe。添加了一个新的解决方案,用于创建新的或添加到现有数据帧
twitter_handles <- c("@katyperry","@justinbieber","@Cristiano","@BarackObama")
# Loop through the twitter handles & store the results as individual dataframes
for(handle in twitter_handles) {
result <- search_tweets(handle, n = 15 , include_rts = FALSE)
result$Source <- handle
df_name <- substring(handle, 2)
if(exists(df_name)) {
assign(df_name, unique(rbind(get(df_name), result)))
} else {
assign(df_name, result)
}
}