【问题标题】:syntax error near unexpected token in script scraping Tweets脚本抓取中的意外标记附近出现语法错误
【发布时间】:2018-07-28 09:29:35
【问题描述】:

我有一个 R 脚本,它本身可以很好地使用 twitteR 包来抓取推文。但是,当我尝试在我的 Mac 上使用 crontab 命令自动执行此脚本时,我收到以下错误消息:

/Users/Simon/WLU/projects_folder/ON18/get_tweets.R: line 1: syntax error near 
unexpected token `twitteR'
/Users/Simon/WLU/projects_folder/ON18/get_tweets.R: line 1: `library(twitteR)'

是否需要添加#/usr/bash 命令或类似的命令来初始化 R 脚本?

library(twitteR)
options(httr_oauth_cache=T)
consumer_key<-'yYol52znZBdtxnwQFpekMyCek'
consumer_secret<-'UMo8h70zYtrd5HSnjCGw1hnG88kfPmvu1wWxL1VvPWVYwpguu6'
access_token<-'1102181509-5hBh8OE7Ehz5NhWVBqpk1olp1dOmWiIK5B9ypzy'
access_token_secret<-'XbYZYWuMGHT5wCDzvDsDHMX3wI5KDzBJ9NQsh1Jj6I'
setup_twitter_oauth(consumer_key, consumer_secret, access_token, 
access_token_secret)

#Get #onpoli tweet
onpoli<-searchTwitter('#onpoli', resultType='recent', n=200)
#Get pcoldr
pcpoldr<-searchTwitter('#pcpoldr', resultType='recent', n=200)
#Get PCPO tweets
pcpo<-searchTwitter('#pcpo', resultType='recent', n=200)
#Turn to data.frames
onpolidf<-twListToDF(onpoli)
pcpoldrdf<-twListToDF(pcpoldr)
pcpodf<-twListToDF(pcpo)
#Write out to .csv files 
write.csv(onpolidf, './Tweets/onpoli.csv', append=T)
write.csv(pcpoldrdf, './Tweets/pcpoldr.csv', append=T)
write.csv(pcpodf, './Tweets/pcpo.csv', append=T)
quite(save='no')

【问题讨论】:

    标签: r twitter web-scraping cron


    【解决方案1】:

    您需要向cron 提供一些可执行文件才能运行。即使脚本被标记为可执行,在没有shebang 的情况下,它也不知道如何执行这个文件。相反,shell 将尝试运行它as a shell script。这会导致语法错误。

    最简单的方法是调用Rscript,将脚本名称传递给它:

    5 0 * * * Rscript /Users/Simon/WLU/projects_folder/ON18/get_tweets.R
    

    或者您可以使脚本本身可执行:

    chmod +x /Users/Simon/WLU/projects_folder/ON18/get_tweets.R
    

    添加一个shebang:

    #!/usr/bin/env Rscript
    

    并直接调用脚本:

    5 0 * * * /Users/Simon/WLU/projects_folder/ON18/get_tweets.R
    

    【讨论】:

      【解决方案2】:

      谢谢你。实际上结果是它找不到rscript。所以我不得不将其修改为/usr/local/bin/Rscript /Users/Simon/WLU/projects_folder/ON18/get_tweets.R

      我在其他地方看到过这个解决方案。显然,如果我重新安装 R 它将起作用。

      我应该以某种方式将此标记为已解决吗?

      【讨论】:

      • 您应该支持 所有有帮助的答案,并标记为接受一个答案 最好地回答了您的问题。这会将问题标记为“已关闭”,并在网站上为您提供一些声誉。请参阅stackoverflow.com/help/someone-answers 了解更多信息。
      • (顺便说一句,这包括您自己的答案。如果您自己想出了答案,请给自己打勾!)
      猜你喜欢
      • 2015-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 2016-09-06
      • 2015-06-08
      相关资源
      最近更新 更多