如何解析tweepy类中的子元素

时间:2018-07-31 11:39:40

标签: python json twitter

我已经编写了解析tweet JSON的代码。我想分别使用媒体内容和非媒体内容。问题是媒体内容仅出现在几条推文中,我不理解如何分隔媒体和非媒体内容。

for tweet in tweets:
            #pdb.set_trace()
            #if tweet.entities.media:
            twitterData.append({"id": tweet.id,"entities":tweet.entities,"text":tweet.text,"user":tweet.user.name,"img":tweet.user.profile_image_url,"retweet_count":tweet.retweet_count,"source":tweet.source,"source_url":tweet.source_url,"created_at":tweet.created_at,"media_image_url":tweet.entities.media.media_url }) 

此代码有效,但是我现在很困惑如何解析那些包含媒体的推文

我尝试过这种方式

for tweet in tweets:
        #pdb.set_trace()
        if tweet.entities.media:
            twitterData.append({"id": tweet.id,"entities":tweet.entities,"text":tweet.text,"user":tweet.user.name,"img":tweet.user.profile_image_url,"retweet_count":tweet.retweet_count,"source":tweet.source,"source_url":tweet.source_url,"created_at":tweet.created_at,"media_image_url":tweet.entities.media.media_url }) 

但它给出了错误

'dict' object has no attribute 'media'

这是正确的,因为所有推文都不包含媒体属性。

有人可以帮我在这里写逻辑吗?这样我才能分别访问媒体推文和非媒体推文?

JSON响应如下:

https://justpaste.it/55roi

注意:由于大小和URL更短限制(属于JSON对象的一部分),因此必须粘贴到SO之外。

1 个答案:

答案 0 :(得分:0)

您可以使用Blub,如下所示:

hasattr

如果缺少for tweet in tweets: #pdb.set_trace() if hasattr(status.entities, 'media'): #if tweet.entities.media: twitterData.append({"id": tweet.id,"entities":tweet.entities,"text":tweet.text,"user":tweet.user.name,"img":tweet.user.profile_image_url,"retweet_count":tweet.retweet_count,"source":tweet.source,"source_url":tweet.source_url,"created_at":tweet.created_at,"media_image_url":tweet.entities.media.media_url }) 属性,它将返回False