как получить только текст твитов в json файл
Итак, я работаю над проектом, использующим twitterAPI для сбора твитов с разными ключевыми словами с использованием определенной долготы и широты. Я просмотрел данные для своих твитов, данные представляют собой список словарей для каждого ключевого слова, содержащего такие поля, как:
dict_keys(['created_at', 'id', 'id_str', 'text', 'truncated', 'entities', 'extended_entities', 'metadata', 'source', 'in_reply_to_status_id', 'in_reply_to_status_id_str', 'in_reply_to_user_id', 'in_reply_to_user_id_str', 'in_reply_to_screen_name', 'user', 'geo', 'coordinates', 'place', 'contributors', 'is_quote_status', 'retweet_count', 'favorite_count', 'favorited', 'retweeted', 'possibly_sensitive', 'lang'])
Теперь я хотел извлечь текст для каждого из ключевых слов x1_tweets, x2_tweets и x3_tweets в файл json.
для этого я определил функцию:
def save_to_json(obj, filename):
with open(filename, 'w') as fp:
json.dump(obj, fp, indent=4, sort_keys=True)
где obj - это список словарей, а filename - имя файла, с которым я хочу сохранить документ. Однако, когда я пытаюсь использовать эту функцию в своих целях,save_to_json(x1_tweets, doors)
он возвращает мне файл, содержащий все в нем. Как мне использовать функцию, которая возвращает мне файл, содержащий только твиты? Любая помощь будет принята! заранее спасибо! вот как выглядит файл json:
[
{
"contributors": null,
"coordinates": null,
"created_at": "Mon May 18 02:08:53 +0000 2020",
"entities": {
"hashtags": [],
"media": [
{
"display_url": "pic.twitter.com/ig7H0jIHOq",
"expanded_url": "https://twitter.com/CMag051/status/1262303473682022400/photo/1",
"id": 1262203448080007168,
"id_str": "1262203448080007168",
"indices": [
98,
121
],
"media_url": "http://pbs.twimg.com/media/EYQ_WT0VAAA6hTK.jpg",
"media_url_https": "https://pbs.twimg.com/media/EYQ_WT0VAAA6hTK.jpg",
"sizes": {
"large": {
"h": 2048,
"resize": "fit",
"w": 1536
},
"medium": {
"h": 1200,
"resize": "fit",
"w": 900
},
"small": {
"h": 680,
"resize": "fit",
"w": 510
},
"thumb": {
"h": 150,
"resize": "crop",
"w": 150
}
},
"type": "photo",
"url": "https://twitter.com/ig7H0jIHOq"
}
],
"symbols": [],
"urls": [],
"user_mentions": []
},
"extended_entities": {
"media": [
{
"display_url": "pic.twitter.com/ig7H0jvHOq",
"expanded_url": "https://twitter.com/CMag051/status/1262253473682022400/photo/1",
"id": 1262203448080007168,
"id_str": "1262203448080007168",
"indices": [
98,
121
],
"media_url": "http://pbs.twimg.com/media/EYQ_WT0VAAA6hTK.jpg",
"media_url_https": "https://pbs.twimg.com/media/EYQ_WT0VAAA6hTK.jpg",
"sizes": {
"large": {
"h": 2048,
"resize": "fit",
"w": 1536
},
"medium": {
"h": 1200,
"resize": "fit",
"w": 900
},
"small": {
"h": 680,
"resize": "fit",
"w": 510
},
"thumb": {
"h": 150,
"resize": "crop",
"w": 150
}
},
"type": "photo",
"url": "https://twitter.com/ig7H0iIHOq"
}
]
},
"favorite_count": 1,
"favorited": false,
"geo": null,
"id": 1262203473682022400,
"id_str": "1262203473682022400",
"in_reply_to_screen_name": null,
"in_reply_to_status_id": null,
"in_reply_to_status_id_str": null,
"in_reply_to_user_id": null,
"in_reply_to_user_id_str": null,
"is_quote_status": false,
"lang": "en",
"metadata": {
"iso_language_code": "en",
"result_type": "recent"
},
"place": null,
"possibly_sensitive": false,
"retweet_count": 0,
"retweeted": false,
"source": "<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>",
"text": "Beautiful evening. \n\nSitting on patio, eating some apple , and listening to the birds chirp. https://twitter.com/ig7H0jIHOq",
"truncated": false,
"user": {
"contributors_enabled": false,
"created_at": "Wed Apr 01 03:32:05 +0000 2009",
"default_profile": false,
"default_profile_image": false,
"description": "Photographer | Music & Sports Enthusiast.",
"entities": {
"description": {
"urls": []
}
},
"favourites_count": 19189,
"follow_request_sent": false,
"followers_count": 547,
"following": false,
"friends_count": 2432,
"geo_enabled": false,
"has_extended_profile": true,
"id": 28041855,
"id_str": "28041855",
"is_translation_enabled": false,
"is_translator": false,
"lang": null,
"listed_count": 0,
"location": "Phoenix, AZ",
"name": "Chris",
"notifications": false,
"profile_background_color": "000000",
"profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/bg.png",
"profile_background_image_url_https": "https://abs.twimg.com/images/themes/theme1/bg.png",
"profile_background_tile": false,
"profile_banner_url": "https://pbs.twimg.com/profile_banners/28041855/1586840506",
"profile_image_url": "http://pbs.twimg.com/profile_images/1262196071817605121/WBvC3h5P_normal.jpg",
"profile_image_url_https": "https://pbs.twimg.com/profile_images/1262196071817605121/WBvC3h5P_normal.jpg",
"profile_link_color": "ABB8C2",
"profile_sidebar_border_color": "000000",
"profile_sidebar_fill_color": "000000",
"profile_text_color": "000000",
"profile_use_background_image": false,
"protected": false,
"screen_name": "CMag051",
"statuses_count": 11285,
"time_zone": null,
"translator_type": "none",
"url": null,
"utc_offset": null,
"verified": false
}
}
1 ответ
Первое, что вам нужно сделать, это изменить приведенный ниже код как:
def save_to_json(obj, filename):
with open(filename, 'a') as fp:
json.dump(obj, fp, indent=4, sort_keys=True)
Вам необходимо изменить режим открытия файла по указанной ниже причине.
w:
Открывается в режиме только для записи. Указатель помещается в начало файла, и это перезаписывает любой существующий файл с тем же именем. Он создаст новый файл, если файл с таким же именем не существует.
a:
Открывает файл для добавления к нему новой информации. Указатель помещается в конец файла. Если файл с таким же именем не существует, создается новый файл.
Кроме того, нет значения sort_keys
поскольку вы только проходите string
а не dict
. Точно так же нет смыслаindent=4
за strings
.
Если вам нужна индексация с текстом твита, вы можете использовать следующий код:
tweets = {}
for i, tweet in enumerate(x1_tweets):
tweets[i] = tweet['text']
save_to_json(tweets,'bat.json')
Приведенный выше код создаст dict
с индексом к твиту и записать в файл после обработки всех твитов.
А если вам просто нужен текст твитов без индекса, вы можете использовать string aggregation
или используйте list
а также append
весь текст из твита в этом list
и напишите это в выходной файл.