首页 > 解决方案 > 使用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"))

标签: pythonjsonmongodbtwitter

解决方案


您可以使用以下方式:

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

它应该工作。


推荐阅读