python - 使用python将Twitter的json按字段插入MongoDB
问题描述
我已经为此工作了几个小时,需要一些帮助。这主要是有效的。我能够连接到 Twitter,提取 json 数据并将其存储在 MongoDB 中,但是并不是我在“打印(推文)”行中看到的所有数据都显示在 MongoDB 中。具体来说,我没有看到 screen_name (或名称或事项)字段。我真的只需要这些字段:“id”、“text”、“created_at”、“screen_name”、“retweet_count”、“favourites_count”、“lang”,除了名字之外我都得到了它们。我不确定为什么它没有与所有其他字段一起插入到数据库中。任何帮助将不胜感激!
from twython import Twython
from pymongo import MongoClient
ConsumerKey = "XXXXX"
ConsumerSecret = "XXXXX"
AccessToken = "XXXXX-XXXXX"
AccessTokenSecret = "XXXXX"
twitter = Twython(ConsumerKey,
ConsumerSecret,
AccessToken,
AccessTokenSecret)
result = twitter.search(q="drexel", count='100')
result1 = result['statuses']
for tweet in result1:
print(tweet) #prints tweets so I know I got data
client = MongoClient('mongodb://localhost:27017/')
db = client.twitterdb
tweet_collection = db.twitter_search
#Fields I need ["id", "text", "created_at", "screen_name", "retweet_count", "favourites_count", "lang"]
for tweet in result1:
try:
tweet_collection.insert(tweet)
except:
pass
print("The number of tweets in English: ")
print(tweet_collection.count(lang="en"))
解决方案
您可以使用以下方式:
def get_document(post):
return {
'id': post['id_str'],
'text': post['text'],
'created_at': post['created_at'],
'retweet_count' : post['retweet_count'],
'favourites_count': post['user']['favourites_count'],
'lang': post['lang'],
'screen_name': post['user']['screen_name']
}
for tweet in result1:
try:
tweet_collection.insert(
get_document(tweet)
)
except:
pass
它应该工作。
推荐阅读
- c++ - c++中string&和string的区别
- elasticsearch - 如何在elasticsearch中获取不同字段/数组值的总和?
- python - PermissionError: [WinError 5] Access is denied 错误发生在 os.remove 中的 pyinstaller exe
- html - 将一个元素右对齐并在其他两个元素下对齐
- python - 使用带有 win32com 的 Python 按名称定位特定的 Excel 工作簿
- python - 从 pandas 列转换或至少删除非英语/不需要(非 ascii)值或将其转换为英文字符
- angular - Docker构建错误:执行程序运行失败[/bin/sh -c npm run build]:退出代码:1
- qt - 如何在 QML 中动态更新 ListView
- python - 循环遍历 Python 中的子字典时出现意外输出
- css - primeng p-dialog 样式覆盖