使用 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 提取推文——如何保存有限数量的变量的主要内容,如果未能解决你的问题,请参考以下文章