2016-08-02 41 views
-5

我一直在尝试刮取一些Twitter的数据,但是当我运行此代码时,出现错误SyntaxError: Missing parentheses in call to 'print'SyntaxError:呼叫'打印'中缺少圆括号

有人可以帮我一个这个吗?

感谢您的时间:)

""" 
Use Twitter API to grab user information from list of organizations; 
export text file 
Uses Twython module to access Twitter API 
""" 

import sys 
import string 
import simplejson 
from twython import Twython 

#WE WILL USE THE VARIABLES DAY, MONTH, AND YEAR FOR OUR OUTPUT FILE NAME 
import datetime 
now = datetime.datetime.now() 
day=int(now.day) 
month=int(now.month) 
year=int(now.year) 


#FOR OAUTH AUTHENTICATION -- NEEDED TO ACCESS THE TWITTER API 
t = Twython(app_key='APP_KEY', #REPLACE 'APP_KEY' WITH YOUR APP KEY, ETC., IN THE NEXT 4 LINES 
    app_secret='APP_SECRET', 
    oauth_token='OAUTH_TOKEN', 
    oauth_token_secret='OAUTH_TOKEN_SECRET') 

#REPLACE WITH YOUR LIST OF TWITTER USER IDS 
ids = "4816,9715012,13023422, 13393052, 14226882, 14235041, 14292458, 14335586, 14730894,\ 
    15029174, 15474846, 15634728, 15689319, 15782399, 15946841, 16116519, 16148677, 16223542,\ 
    16315120, 16566133, 16686673, 16801671, 41900627, 42645839, 42731742, 44157002, 44988185,\ 
    48073289, 48827616, 49702654, 50310311, 50361094," 

#ACCESS THE LOOKUP_USER METHOD OF THE TWITTER API -- GRAB INFO ON UP TO 100 IDS WITH EACH API CALL 
#THE VARIABLE USERS IS A JSON FILE WITH DATA ON THE 32 TWITTER USERS LISTED ABOVE 
users = t.lookup_user(user_id = ids) 

#NAME OUR OUTPUT FILE - %i WILL BE REPLACED BY CURRENT MONTH, DAY, AND YEAR 
outfn = "twitter_user_data_%i.%i.%i.txt" % (now.month, now.day, now.year) 

#NAMES FOR HEADER ROW IN OUTPUT FILE 
fields = "id screen_name name created_at url followers_count friends_count statuses_count \ 
    favourites_count listed_count \ 
    contributors_enabled description protected location lang expanded_url".split() 

#INITIALIZE OUTPUT FILE AND WRITE HEADER ROW 
outfp = open(outfn, "w") 
outfp.write(string.join(fields, "\t") + "\n") # header 

#THE VARIABLE 'USERS' CONTAINS INFORMATION OF THE 32 TWITTER USER IDS LISTED ABOVE 
#THIS BLOCK WILL LOOP OVER EACH OF THESE IDS, CREATE VARIABLES, AND OUTPUT TO FILE 
for entry in users: 
    #CREATE EMPTY DICTIONARY 
    r = {} 
    for f in fields: 
     r[f] = "" 
    #ASSIGN VALUE OF 'ID' FIELD IN JSON TO 'ID' FIELD IN OUR DICTIONARY 
    r['id'] = entry['id'] 
    #SAME WITH 'SCREEN_NAME' HERE, AND FOR REST OF THE VARIABLES 
    r['screen_name'] = entry['screen_name'] 
    r['name'] = entry['name'] 
    r['created_at'] = entry['created_at'] 
    r['url'] = entry['url'] 
    r['followers_count'] = entry['followers_count'] 
    r['friends_count'] = entry['friends_count'] 
    r['statuses_count'] = entry['statuses_count'] 
    r['favourites_count'] = entry['favourites_count'] 
    r['listed_count'] = entry['listed_count'] 
    r['contributors_enabled'] = entry['contributors_enabled'] 
    r['description'] = entry['description'] 
    r['protected'] = entry['protected'] 
    r['location'] = entry['location'] 
    r['lang'] = entry['lang'] 
    #NOT EVERY ID WILL HAVE A 'URL' KEY, SO CHECK FOR ITS EXISTENCE WITH IF CLAUSE 
    if 'url' in entry['entities']: 
     r['expanded_url'] = entry['entities']['url']['urls'][0]['expanded_url'] 
    else: 
     r['expanded_url'] = '' 
    print r 
    #CREATE EMPTY LIST 
    lst = [] 
    #ADD DATA FOR EACH VARIABLE 
    for f in fields: 
     lst.append(unicode(r[f]).replace("\/", "/")) 
    #WRITE ROW WITH DATA IN LIST 
    outfp.write(string.join(lst, "\t").encode("utf-8") + "\n") 

outfp.close() 
+3

你试图在Python 3运行Python 2代码之间留出的空间。 –

+3

我知道这会让你震惊,但是......你打电话给'print'......它缺少括号。 ('print r' - >'print(r)') –

+0

你有没有做过任何研究?它在[问]指南中,有几个关于堆栈溢出的问题。 –

回答

1

在蟒蛇2,打印已经声明,不是一个函数。这意味着你可以在没有括号的情况下使用它。在python 3中,这已经改变了。这是一个函数,你需要使用print(foo)而不是print foo。

+0

值得注意的是,我一直使用括号。这些无意义的变化从未打扰过我。再次,我仍然用C表示返回的值。有时候,那些没有被修改以跟上Joneses运行良好的事情,即使在Joneses改变他们的模式以跟上Smiths之后。 –

2

看起来好像你正在使用python 3.x,但是你在这里运行的代码是python 2.x代码。有两种方法来解决这个问题:

  • 下载python 2.X上Python's website,并用它来运行脚本
  • 在你打印电话在年底通过在年底通过print(r)更换print r添加括号(并继续使用蟒蛇3)

但今天,越来越多的广大Python程序员都使用python 3,官方python wiki规定如下:

Python 2.x is legacy, Python 3.x is the present and future of the language

如果我是你,我会选择第二个选项去继续使用Python 3

1

看起来你想在Python 3,其中printfunction运行Python 2代码和所需的括号:

print(foo) 
1

你只需要pranethesis添加到您的打印statmetnt将其转换为一个功能,如错误说:

print expression -> print(expression) 

在Python 2,打印是一个声明,但在Python 3,打印是福nction。所以,你可以只交替运行您的代码与Python 2 print(expression)是与Python 2


而且向后兼容的,你为什么要善用您的所有意见?它很烦人。您的代码也以几种方式违反PEP 8。得到像PyCharm这样的编辑器(它是免费的),可以自动检测这样的错误。

  • 你没有离开#和您的评论
  • 之间的空间你没有=和其他标记