python - 如何从 tweepy 类中解析子元素
问题描述
我已经编写了解析推文 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 缩短器限制,必须在 SO 之外粘贴,这是 JSON 对象的一部分。
解决方案
您可以使用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
如果media
缺少该属性,它将返回。
推荐阅读
- javascript - 如何更新 AG-Grid Detail Grid 上的数据
- postgresql - 如何更改枚举选项?
- c++ - 如何并行化将文件中的数据读取到向量中的程序
- python-3.x - 如何使用 Python 和请求解决此 SSLError?
- python - python:声明之前的for循环体并且没有缩进?
- python - 创建一个迭代输入值列表的字典列表
- c++ - 从 cmd 返回的字符串未按预期拆分(C++)
- typescript - 如何将类型添加到嵌套对象
- python - 在将该列表放入查询之前,如何从列表中删除括号?
- magento2 - Magento 2 - 当画廊全屏时如何垂直放置点