首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在某人的时间轴上抓取推文的favorite_count?

如何在某人的时间轴上抓取推文的favorite_count?
EN

Stack Overflow用户
提问于 2016-01-16 20:50:59
回答 2查看 583关注 0票数 2

如果我运行我的代码没有最后一行:getVal(tweet['retweeted_status']['favorite_count']),,那么抓取就可以了,但是当我添加这一行时,我得到一个错误消息KeyError: 'retweeted_status'

有人知道我做错了什么吗?

代码语言:javascript
复制
q = "David_Cameron"
results = twitter_user_timeline(twitter_api, q)
print len(results)
# Show one sample search result by slicing the list...
# print json.dumps(results[0], indent=1)
csvfile = open(q + '_timeline.csv', 'w')
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['created_at',
                'user-screen_name',
                'text',
                'coordinates lng',
                'coordinates lat',
                'place',
                'user-location',
                'user-geo_enabled',
                'user-lang',
                'user-time_zone',
                'user-statuses_count',
                'user-followers_count',
                'user-created_at'])
for tweet in results:
    csvwriter.writerow([tweet['created_at'],
                    getVal(tweet['user']['screen_name']),
                    getVal(tweet['text']),
                    getLng(tweet['coordinates']),
                    getLat(tweet['coordinates']),
                    getPlace(tweet['place']),
                    getVal(tweet['user']['location']),
                    getVal(tweet['user']['geo_enabled']),
                    getVal(tweet['user']['lang']),
                    getVal(tweet['user']['time_zone']),
                    getVal(tweet['user']['statuses_count']),
                    getVal(tweet['user']['followers_count']),
                    getVal(tweet['user']['created_at']), 
                    getVal(tweet['retweeted_status']['favorite_count']),
                    ])
print "done"
EN

回答 2

Stack Overflow用户

发布于 2016-01-16 23:05:44

根据https://dev.twitter.com/overview/api/tweets上的API,这个属性可能存在,也可能不存在。

如果该属性不存在,您将无法访问该属性。您可以使用in运算符进行安全查找,通过首先检查是否存在来访问它

retweeted_favourite_count = tweet['retweeted_status']['favourite_count'] if 'retweeted_status' in tweet else None

或者采用假设它存在但不存在时进行处理的方式

try: retweeted_favourite_count = tweet['retweeted_status']['favourite_count'] except KeyError: retweeted_favourite_count = 0

然后在write row函数中分配retweeted_favourite_count值。

此外,您的CSV标题行缺少对转发的收藏计数的描述

更新示例:for tweet in results: #Notice this is one long line not two rows. retweeted_favourite_count = tweet['retweeted_status']['favourite_count'] if 'retweeted_status' in tweet else None csvwriter.writerow([tweet['created_at'], getVal(tweet['user']['screen_name']), getVal(tweet['text']), getLng(tweet['coordinates']), getLat(tweet['coordinates']), getPlace(tweet['place']), getVal(tweet['user']['location']), getVal(tweet['user']['geo_enabled']), getVal(tweet['user']['lang']), getVal(tweet['user']['time_zone']), getVal(tweet['user']['statuses_count']), getVal(tweet['user']['followers_count']), getVal(tweet['user']['created_at']), # And insert it here instead getVal(retweeted_favourite_count), ])

您还可以交换线路:

getVal(tweet['retweeted_status']['favorite_count'])

根据Padriac Cunningham的建议

getVal(tweet.get('retweeted_status', {}).get('favourite_count', None)

票数 1
EN

Stack Overflow用户

发布于 2016-01-19 01:03:17

仅供参考,对于任何未来看到这一点的人来说...使用下面的代码,我设法让代码正常工作。getVal( tweet ' favorite _ count ')给出一条推文的收藏计数。

代码语言:javascript
复制
q = "SkyNews"
results = twitter_user_timeline(twitter_api, q)
csvfile = open(q + '_timeline.csv', 'w')
csvwriter = csv.writer(csvfile)
csvwriter.writerow(['created_at',
                'user-screen_name',
                'text',
                'language',
                'coordinates lng',
                'coordinates lat',
                'place',
                'user-location',
                'user-geo_enabled',
                'user-lang',
                'user-time_zone',
                'user-statuses_count',
                'user-followers_count',
                'user-friend_count',
                'user-created_at', 
                'favorite_count',
                'retweet_count',
                'user-mentions',
                'urls',
                'hashtags',
                'symbols'])
 for tweet in results:
    csvwriter.writerow([tweet['created_at'],
                    getVal(tweet['user']['screen_name']),
                    getVal(tweet['text']),
                    getVal(tweet['lang']),
                    getLng(tweet['coordinates']),
                    getLat(tweet['coordinates']),
                    getPlace(tweet['place']),
                    getVal(tweet['user']['location']),
                    getVal(tweet['user']['geo_enabled']),
                    getVal(tweet['user']['lang']),
                    getVal(tweet['user']['time_zone']),
                    getVal(tweet['user']['statuses_count']),
                    getVal(tweet['user']['followers_count']),
                    getVal(tweet['user']['friends_count']),
                    getVal(tweet['user']['created_at']), 
                    getVal(tweet['favorite_count']),
                    getVal(tweet['retweet_count']),
                    tweet['entities']['user_mentions'],
                    tweet['entities']['urls'],
                    tweet['entities']['hashtags'],
                    tweet['entities']['symbols'],
                    ])

print "done"

其中,getVal、getLng和getLat在前面的代码中定义为:

代码语言:javascript
复制
def getVal(val):
    clean = ""
    if isinstance(val, bool):
        return val
    if isinstance(val, int):
         return val
    if val:
         clean = val.encode('utf-8') 
    return clean

def getLng(val):
     if isinstance(val, dict):
         return val['coordinates'][0]

def getLat(val):
     if isinstance(val, dict):
        return val['coordinates'][1]

def getPlace(val):
    if isinstance(val, dict):
        return val['full_name'].encode('utf-8')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34827160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档