如何在tweepy响应中检查扩展权限是否存在

问题描述 投票:0回答:1

我可以从推文中获取不同的推文参数。

    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。所以,如果我尝试像这样获取它

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

它给出了错误,因为扩展实体可能不会出现在很少的推文中。

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

python twitter tweepy
1个回答
0
投票

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

检查密钥是否存在:

你可以这样做,因为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。如果您需要进一步的帮助,可以为这类事情提供一些好的想法。

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.