使用 Python 提取推文——如何保存有限数量的变量

Posted

技术标签:

【中文标题】使用 Python 提取推文——如何保存有限数量的变量【英文标题】:Using Python to extract tweets - how to save a limited amount of variables 【发布时间】:2021-02-22 14:46:54 【问题描述】:

我是 python 新手,试图为研究项目提取推文。

我使用图书馆搜索推文。现在我只想打印从 twitter 收到的大量变量中的几个变量。 我根本不明白为什么这段代码会写入所有变量——我只想要一个视图变量。 created_at、文本、extended_tweet、用户屏幕名称、用户名.. 一般来说,我真的很想了解如何打印我需要的变量。我真的很绝望,因为我不明白。 以下是可以使用的变量:HERE

#above yaml...keys... 

import json
from searchtweets import load_credentials, gen_rule_payload, ResultStream

premium_search_args = load_credentials("twitter_keys.yaml",
                                       yaml_key="search_tweets_api",
                                       env_overwrite=False)

rule = gen_rule_payload(SEARCH_QUERY,
                        results_per_call=RESULTS_PER_CALL,
                        from_date=FROM_DATE,
                        to_date=TO_DATE
                        )

rs = ResultStream(rule_payload=rule,
                  max_results=MAX_RESULTS,
                  **premium_search_args)

with open(FILENAME, 'a', encoding='utf-8') as f:
    n = 0
    for tweet in rs.stream():
        n += 1
        if n % PRINT_AFTER_X == 0:
            print('0: 1'.format(str(n), tweet['created_at']))
        json.dump(tweet, f)
        f.write('\n')
        
#Use csv writer
csvFile = open('result.csv', 'a')
csvWriter = csv.writer(csvFile)


for tweet in rs.stream(): # how can I write it into an excel file? the relevant variables. # all variables in rs saved?

    # Write a row to the CSV file. I use encode UTF-8
    csvWriter.writerow([
        tweet.created_at,
        tweet.text,
        tweet.extended_tweet
        #tweet.in_reply_to_status_id,
          ])
    print(tweet.created_at, tweet.text, tweet.extended_tweet)

#does not work

非常感谢!!!!!!

克里斯托夫

【问题讨论】:

【参考方案1】:

您是否使用 json 将“tweet”变量的内容应用到字典中?

【讨论】:

感谢您的回答!对不起,我真的不明白这个问题。你能举个例子吗?谢谢!【参考方案2】:

如果你从服务器收到一个 json 字符串,你需要使用 json 库将其转换为字典,以便能够从中获取字典键的值

例如:

import json

# write the server response to the variable
tweet = '''
 "created_at": "Wed Oct 10 20:19:24 +0000 2018",
 "id": 1050118621198921728,
 "id_str": "1050118621198921728",
 "text": "To make room for more expression, we will now count all emojis as equal—including those with gender‍‍‍ ‍‍and skin t… https://.../...",
 "user": ,
 "entities": 
'''

dict_tweet = json.loads(tweet) # convert the server response to dict

created_at = dict_tweet['created_at']

print(created_at) # now we can ask him for the value of any key

它显示:“Wed Oct 10 20:19:24 +0000 2018”

【讨论】:

我更改了代码 - 我这样做了 - 看上面 - 我导入了 json .- 但我不能只保存选定的变量。非常感谢您的帮助! 注意,您仍然在将整个变量 json.dump(tweet, f) 写入文件,而不是写入特定键 json.dump(tweet['created_at']), f) 再次感谢!!越来越清晰了! :) 但是我现在这样做了:json.dump(tweet['created_at', 'text','extended_tweet'], f) 现在我得到一个 keyError。对于 extended_tweet 似乎很清楚为什么在我编写的所有变量的 json 中,extended_tweet 有一个子类别:"created_at":"DATE", "text":text,max140char",..., "extended_tweet": "full_text ": "TEXT STRING", "NextVariable":,.. 但是,如果我只输入 json.dump(tweet['created_at', 'text'], f) 它也不起作用。我需要全文!谢谢 :) 这是因为您只能从字典中获取一个键。试试json.dump(tweet['created_at'] + ' - ' + tweet['text'], f) 很好用 :) 一个问题仍然是完美的 :) 我需要扩展推文。 ,它有一个子类别。 json.dump(tweet['created_at'] + ' - ' + tweet['text'] + tweet ["extended_tweet": ["full_text"]], f) 如果我这样尝试 - 会出现以下错误:TypeError: unhashable type: 'slice' extended_tweet 似乎是一个额外的对象? "created_at": "DATE", "id_str": "55", "text": "Just another Tweet Max 140 Chars", "display_text_range": [0, 140], "truncated": true, "user": "id_str": "0", , "extended_tweet": "full_text": "" ]

以上是关于使用 Python 提取推文——如何保存有限数量的变量的主要内容,如果未能解决你的问题,请参考以下文章

使用Python的Tweepy从昨天提取关于某个主题的所有推文?

如何使用 Python 检索给定用户的所有推文和属性?

如何使用 Python 检索给定用户的所有推文和属性?

Python:预测来自用户的推文数量

Twitter:如何提取包含符号 (!,%,$) 的推文?

如何在 tweepy(python)中获取推文 ID(since_id,max_id)?