【问题标题】:How to check if extended entity is present or not in tweepy response如何检查tweepy响应中是否存在扩展实体
【发布时间】:2022-04-23 21:37:22
【问题描述】:

我能够从推文中获取不同的推文参数。

    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
        

我想解析推文中的media 对象,但并非所有推文都提供extended_entities 中存在media_url 的对象。 所以如果我尝试这样获取它:

tweet_record['media_url'] = tweet.extended_entities.media_url

错误是因为extended_entities 可能不会出现在某些推文中。

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

【问题讨论】:

    标签: python twitter tweepy


    【解决方案1】:

    您有几个选项,您可以检查密钥是否存在,或使用一些尝试/例外。

    检查密钥是否存在:

    您可以这样做,因为 tweepy 返回一个状态对象,该对象的作用类似于 json 文件或 python 字典,因此您基本上有一个键:值对。你应该可以使用(通过你上面的代码)

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

    当然,反过来也是可以的

    if 'extended_entities' not in tweet:
        #whatever you want to do
    

    这可能会导致问题,如果extended_entities 存在,但由于某种原因media_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 用于访问对象的无效属性。您当然可能希望重新排序以提高可读性。不过请记住,虽然这样做是pythonic,但我认为如果经常使用它可能会有点难以阅读。

    在查找此答案时,我提到了 this question。如果您需要进一步的帮助,可以为此类事情提供一些好主意。

    希望对您有所帮助。

    【讨论】:

      【解决方案2】:

      另外,一个不错的选择是在 if 语句中使用 hasattr(Object, name)

      if hasattr(tweet, "extended_entities"):
      \# do whatever
      

      【讨论】:

        猜你喜欢
        • 2013-05-12
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2018-08-27
        • 2011-08-31
        • 2013-04-02
        • 2017-11-19
        • 1970-01-01
        相关资源
        最近更新 更多