0

目标:需要了解如何将下面 api 搜索中的数据解析为 CSV 文件。搜索以以下格式返回结果:

[(u'Bertille Maciag', 10), (u'Peter Prior', 5), (u'Chris OverPar Duguid', 4), (u
'Selby Dhliwayo', 4), (u'FakeBitch!', 4), (u'Django Unchianed UK', 4), (u'Padrai
g Lynch ', 4), (u'Jessica Gunn', 4), (u'harvey.', 4), (u'Wowphotography', 3)]

我是 python 的新手,任何帮助将不胜感激

import twitter, json, operator
#Construct Twitter API object
searchApi = twitter.Twitter(domain="search.twitter.com")
#Get trends
query = "#snow"
tweeters = dict()

for i in range(1,16):
    response = searchApi.search(q=query, rpp=100, page=i)
    tweets = response['results']
    for item in tweets:
        tweet = json.loads(json.dumps(item))
        user = tweet['from_user_name']
        #print user
        if user in tweeters:
            # print "list already contains", user
            tweeters[user] += 1
        else:
           tweeters[user] = 1

sorted_tweeters = sorted(tweeters.iteritems(), key=operator.itemgetter(1),     reverse=True)  

print len(tweeters)
print tweeters

print sorted_tweeters[0:10]
print 'Done!'
4

2 回答 2

2

看起来您已经完成了所有艰苦的工作,只是缺少“保存到 csv”部分。

import collections
import twitter, json, operator
#Construct Twitter API object
searchApi = twitter.Twitter(domain="search.twitter.com")
#Get trends
query = "#snow"
tweeters = collections.defaultdict(lambda: 0)

for i in range(1,16):
    response = searchApi.search(q=query, rpp=100, page=i)
    tweets = response['results']
    for item in tweets:
        user = item['from_user_name']
        #print user
        tweeters[user] += 1

sorted_tweeters = sorted(tweeters.iteritems(), key=operator.itemgetter(1), reverse=True)  

str_fmt = u'%s\u200E, %d \n'
with open('test_so.csv','w') as f_out:
    for twiters in sorted_tweeters:
        f_out.write((str_fmt % twiters).encode('utf8'))

您需要格式字符串上的“u”,encode因为用户名中有非 ascii 字符。 u'\200E是 ltr 标记,以便 csv 文件使用 rtl 语言用户名看起来正确。

我还稍微清理了迭代代码,通过使用defaultdict你不需要检查键是否存在,如果它不存在,则调用生成器函数并返回它的值(在本例中为 0)。

item已经是 a 了dict,不需要再转成 json 字符串再转回 adict

于 2013-01-20T18:32:09.483 回答
1

你看过python CSV模块吗?使用您的输出:

import csv, os

x = [(u'Bertille Maciag', 10), (u'Peter Prior', 5), (u'Chris OverPar Duguid', 4), (u'Selby Dhliwayo', 4), (u'FakeBitch!', 4), (u'Django Unchianed UK', 4), (u'Padraig Lynch ', 4), (u'Jessica Gunn', 4), (u'harvey.', 4), (u'Wowphotography', 3)]

f = open("/tmp/yourfile.csv", "w")
writer = csv.writer(f, quoting=csv.QUOTE_ALL)
for i in x:
    writer.writerow(i)

f.close()
于 2013-01-20T18:29:31.543 回答