【发布时间】:2015-12-30 06:12:43
【问题描述】:
我遇到了一些问题,我不断收到:
AttributeError: 'int' object has no attribute 'encode'
当我运行它时。
我认为 UTF-8 会是解决这个问题的最佳选择。订阅者只会返回数字或 NoneTypes。
任何帮助将不胜感激。
import urllib2,time,csv,json,requests,urlparse,pdb
SEARCH_URL = urllib2.unquote("http://soyuz.elastic.tubularlabs.net:9200/intelligence_v2/channel_intelligence/%s")
reader = csv.reader(open('input.csv', 'r+U'), delimiter=',', quoting=csv.QUOTE_NONE)
#cookie = {"user": "2|1:0|10:1438908462|4:user|36:eyJhaWQiOiA1Njk3LCAiaWQiOiA2MzQ0fQ==|b5c4b3adbd96e54833bf8656625aedaf715d4905f39373b860c4b4bc98655e9e"}
myfile = open('accounts.csv','w')
writer = csv.writer(myfile, quoting=csv.QUOTE_MINIMAL)
processCount = 1
idsToProcess = []
for row in reader:
if len(row)>0:
idsToProcess.append(row[0])
#idsToProcess = ['fba_491452930867938']
for userID in idsToProcess:
# print "fetching for %s.." % fbid
url = SEARCH_URL % userID
facebooksubscribers = None
Instagramsubscribers = None
vinesubscribers = None
response = requests.request("GET", url)
ret = response.json()
titleResponse = ret['_source']['title']
try:
facebooksubscribers = ret['_source']['facebook']['subscribers']
except:
facebooksubscribers = " "
try:
instagramsubscribers = ret['_source']['instagram']['subscribers']
except:
instagramsubscribers = " "
try:
vinesubscribers = ret['_source']['vine']['subscribers']
except:
vinesubscribers = " "
time.sleep(0)
row = [s.encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]]
writer.writerow(row)
#writer.writerow([userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers,twitterURL])
myfile.flush()
print u"%s,%s,%s,%s,%s,%s" % (processCount,userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers)
processCount += 1
#print sumEngs
#print vidToEngs
#print sum(vidToEngs.values())
myfile.close()
exit()
【问题讨论】:
-
因为这些
[userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]元素之一是 int 并且您不能对 int 执行编码操作。您可能希望在 for 循环中进行类型转换。将row = [s.encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]]替换为row = [str(s).encode('utf-8') for s in [userID,titleResponse,facebooksubscribers,instagramsubscribers,vinesubscribers]] -
@Pramod 你应该在你的解决方案中发布一个答案,这对我来说也是完全有效的。
-
@Pramod 感谢您的提示。我现在在这里遇到另一个错误:
SyntaxError: Non-ASCII character '\xe2' in file SubscribersPullCrossPlatform.py on line 49, but no encoding declared; -
@Waveformer 然后将
# -*- coding: utf-8 -*-放在文件的顶部。 -
@Pramod 感谢您在这里提供帮助。添加到标题后,我现在得到
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
标签: python json encoding elasticsearch