如何检查tweepy response中是否存在extended entity

2024-05-04 16:45:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以从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_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中的media对象。但是extended_entities并不是所有tweet中都有媒体url。 所以如果我试着像这样拿它

^{pr2}$

它会出错,因为扩展实体可能不会出现在少数tweet中。在

如何处理此问题并正确获取媒体内容?在


Tags: textnameextendedlangcountlocationrecordkeyword
1条回答
网友
1楼 · 发布于 2024-05-04 16:45:47

这里有几个选项,可以检查密钥是否存在,或者使用一些try/exceptions。在

检查密钥是否存在:

之所以可以这样做,是因为tweepy返回一个status对象,该对象的行为类似于json文件或python字典,因此实际上有一个key:值对。你应该能够使用(按照你上面的代码)

if 'extended_entities' in tweet:
    tweet_record['media_url'] = tweet.extended_entities.media_url

当然,反过来也是可能的

^{pr2}$

但是这可能会导致问题,如果扩展的实体存在,但是由于某种原因media_url不存在呢?嘿,我想从这里得到更多的东西(如果我不想从这里得到更多的东西!)您将不得不执行长或多嵌套if语句,这看起来不是最好的

^{3}$

所以试着扔出去可能更容易,除了…

try:
    tweet_record['media_url'] = tweet.extended_entities.media_url
except AttributeError:
    #etc

这意味着程序在找不到特定元素时不会出错。AttributeError用于访问对象的无效属性。当然,为了便于阅读,您可能需要重新订购。但是请记住,虽然这样做是pythonic如果在我看来使用得太频繁,可能会有点难以阅读。在

我在查找答案时提到了this question。如果你需要进一步的帮助的话,给你一些好主意。在

希望有帮助。在

相关问题 更多 >