JSONDecodeError при очистке данных Twitter - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я пытаюсь очистить данные из Twitter.Мне удается получить твиты на основе определенного хэштега, а затем вывести их в текстовый файл в формате JSON, используя следующий код:

import json
import tweepy
import pandas as pd
import time

with open('consumer_key.txt', 'r') as f:
    consumer_key =  f.read()
f.closed

with open('consumer_secret.txt', 'r') as f:
    consumer_secret = f.read()
f.closed

with open('access_key.txt', 'r') as f:
    access_key = f.read()
f.closed

with open('access_secret.txt', 'r') as f:
    access_secret = f.read()
f.closed

#Authentication
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_key, access_secret)
api = tweepy.API(auth)

api = tweepy.API(auth, wait_on_rate_limit=True,
             wait_on_rate_limit_notify=True) # Connect to the api

if (not api):
    print ("Error")
    sys.exit(-1)

public_tweets = api.home_timeline() # Get the post in the timeline
for tweet in public_tweets:
    print(tweet.text) 

with open('tweets.txt', 'a') as f:
    for tweet in tweepy.Cursor(api.search, q='#apple', count=2, lang='en', since='2017-04-03').items():
        json.dump(tweet._json, f, indent=4)

Однако, когда я пытаюсь прочитать файл, используя

with open('tweets.txt', 'r') as f:
    for line in f:
        tweet = json.loads(line)
        tweet_text = tweet['text']
        print(tweet_text)

выдает ошибку «JSONDecodeError: Ожидается имя свойства, заключенное в двойные кавычки: строка 2, столбец 1 (символ 2)»

Это фрагмент моего текстового файла:

{
    "created_at": "Wed Dec 05 10:37:07 +0000 2018",
    "id": 1070265807492530176,
    "id_str": "1070265807492530176",
    "text": "RT @evankirstel: The Apple Watch Series 3 Made Up Majority of 
Estimated 4.2 Million Q3 2018 Apple Watch Sales #applewatch #apple  
@mactrast\u2026",
    "truncated": false,
    "entities": {
        "hashtags": [
            {
                "text": "applewatch",
                "indices": [
                    110,
                    121
                ]
            },
            {
                "text": "apple",
                "indices": [
                    122,
                    128
                ]
            }
        ],
        "symbols": [],
        "user_mentions": [
            {
                "screen_name": "evankirstel",
                "name": "Evan Kirstel",
                "id": 35203319,
                "id_str": "35203319",
                "indices": [
                    3,
                    15
                ]
            },
            {
                "screen_name": "MacTrast",
                "name": "MacTrast",
                "id": 16711478,
                "id_str": "16711478",
                "indices": [
                    130,
                    139
                ]
            }
        ],

Как я могу решить это?В конечном итоге я хочу извлечь данные, основанные на ключах, и сохранить их в кадре данных pandas.

1 Ответ

0 голосов
/ 05 декабря 2018

вам нужно прочитать весь контент, а не построчно, и не забудьте добавить strict=False, чтобы разрешить / преобразовать \u2026 в

with open('tweets.txt', 'r') as f:
    tweet = json.load(f, strict=False)
    tweet_text = tweet['text']
    print(tweet_text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...