2017-09-10 2 views
0

Ich versuche, den JSON-Code von einem Objekt mit Schwerpunkt auf Twitter zu ziehen. Ich mache das aus Neugierde und auch, weil ich versuche zu bestimmen, was ich mit Scrappy anfordern kann, um Code zu schreiben, der das unendliche Scrollen von Twitter umgeht und mir erlaubt, alle Tweets von der Timeline eines Benutzers zu entfernen.Python 3: Versuchen, JSON-Code von Anfrage

(ich weiß, dass es einige Pakete gibt, die dies bereits tun, aber ich will es selbst einrichten lernen, indem Sie :))

Ich habe das urllib Paket wurde unter Verwendung der Anforderungsdaten zu bekommen, aber, ich habe in einen frustrierenden Fehler laufe, wenn ich es versuchen:

import json 
import urllib 

with urllib.request.urlopen("https://twitter.com/vonkraush") as url: 
    data = url.read().decode() 

print(json.loads(data)) 

Traceback (most recent call last): 

    File "<ipython-input-30-208336effb36>", line 1, in <module> 
    json.loads(data) 

    File "C:\Users\Josh\Anaconda3\lib\json\__init__.py", line 354, in loads 
    return _default_decoder.decode(s) 

    File "C:\Users\Josh\Anaconda3\lib\json\decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 

    File "C:\Users\Josh\Anaconda3\lib\json\decoder.py", line 357, in raw_decode 
    raise JSONDecodeError("Expecting value", s, err.value) from None 

JSONDecodeError: Expecting value 

ich habe versucht ausdrücklich 'utf-8' in die Decodierung und ein paar andere Methoden vorbei, aber nichts hat bisher erlaubt, meint diese Fehler zu umgehen. Was mache ich falsch und wie kann ich es beheben?

+2

'Daten' ist ein HTML-Dokument, kein JSON-Objekt. Sie können es nicht an 'json.loads()' übergeben. – DyZ

+0

Odd, ich habe andere Leute genau diesen gleichen Code-Block auf Stapelwechsel vorschlagen vorgeschlagen: https://stackoverflow.com/questions/12965203/how-to-get-json-from-webpage-into-python-script Was soll ich stattdessen tun? –

+1

Wenn JSON auf dieser Seite vorhanden ist, müssen Sie es von der Seite extrahieren und dann 'json.loads()' aufrufen. – DyZ

Antwort

0

Sie tun es falsch. Diese URL gibt Ihnen immer eine HTML-Seite zurück. Um user Daten von Twitter zu erhalten, verwenden Sie Twitter Dev API.

Sehen Sie hier, könnte Ihnen helfen, Informationen von Twitter zu extrahieren. Aber dafür müssen Sie sich als Twitter user authentifizieren. Stellen Sie sicher, dass Sie zuerst eine Twitter-App erstellen und Ihren OAuth-Schlüssel erhalten. Es wird Ihr Zugang zu Twitter API sein.

Twitter API verwendet tokenbasierte Authentifizierung. Das Token, das Sie als Antwort auf den API-Aufruf erhalten, ist Ihre Identität als user.

+0

Twitter API lässt mich nur ein wenig über 3000 Tweets ziehen, ich bin mit direkten Web Scraping herumspielen, um zu sehen, ob ich alle Tweets eines Benutzers ziehen kann. –

+0

Dieses [Twitter Scraper] (https://github.com/bpb27/twitter_scraping), könnte Ihr Problem lösen. –

+0

Ich mache das meistens, damit ich besser verstehen kann, wie Web Scraping mit Scrapy arbeitet, um zu lernen, indem ich etwas tue, anstatt ein paar Tweets zu ziehen. Sie verwenden auch Selen anstatt Scrapy. –

Verwandte Themen