Python 如何检查tweepy响应中是否存在扩展实体
我可以从tweet中获取不同的tweet参数Python 如何检查tweepy响应中是否存在扩展实体,python,twitter,tweepy,Python,Twitter,Tweepy,我可以从tweet中获取不同的tweet参数 keyword = tweepy.Cursor(api.search, val,tweet_mode='extended',lang='en').items(2) tweetdone = 0 all_tweet = [] for tweet in keyword: tweet_record = {} tweet_record['tweet.text'] = tweet.full_tex
keyword = tweepy.Cursor(api.search, val,tweet_mode='extended',lang='en').items(2)
tweetdone = 0
all_tweet = []
for tweet in keyword:
tweet_record = {}
tweet_record['tweet.text'] = tweet.full_text
tweet_record['tweet.user.name'] = tweet.user.name
tweet_record['tweet.user.location'] = tweet.user.location
tweet_record['tweet.user.verified'] = tweet.user.verified
tweet_record['tweet.lang'] = tweet.lang
tweet_record['tweet.created_at'] = tweet.created_at
tweet_record['tweet.user'] = tweet.user
tweet_record['tweet.retweet_count'] = tweet.retweet_count
tweet_record['tweet.favorite_count'] = tweet.favorite_count
我的问题是。我想解析tweet中的媒体
对象。但并非所有推文中都有媒体url所在的扩展实体。
所以如果我试着这样取它
tweet_record['media_url'] = tweet.extended_entities.media_url
它给出了错误,因为扩展实体可能不会出现在少数tweet中
如何处理此问题并正确获取媒体内容?这里有几个选项,您可以检查密钥是否存在,或者使用一些try/excepts 检查密钥是否存在: 之所以可以这样做,是因为tweepy返回一个status对象,其作用类似于json文件或python字典,因此实际上您有一个key:value对。您应该能够使用(按照上述代码) 当然,反过来也是可能的
if 'extended_entities' not in tweet:
#whatever you want to do
但这可能会导致问题,如果扩展实体存在,但由于某种原因,媒体url不存在,该怎么办?如果您想从中获得更多(没有状态对象,但我只是想在这里证明未来!),您将不得不执行长的或多嵌套的if语句,这看起来不是最好的
if 'extended_entities' in tweet:
if 'media_url' in tweet['extended_entities']
#etc
因此,除了……,
try:
tweet_record['media_url'] = tweet.extended_entities.media_url
except AttributeError:
#etc
这意味着当找不到特定元素时,程序不会出错。AttributeError用于访问对象的无效属性。当然,为了便于阅读,您可能需要重新排序。但是请记住,在我看来,当你这么做的时候,如果用得太多,阅读起来可能有点困难
我在查找有关此答案的信息时提到。如果你需要进一步的帮助,给你一些关于这类事情的好主意
希望有帮助
try:
tweet_record['media_url'] = tweet.extended_entities.media_url
except AttributeError:
#etc