我已经编写了解析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响应如下:
注意:由于大小和URL更短限制(属于JSON对象的一部分),因此必须粘贴到SO之外。
答案 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
。