TypeError cannot serialize (type bytes), ElementTree

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nydiro
User
Beiträge: 2
Registriert: Freitag 4. Juni 2021, 18:55

Hallo liebe Community,

aktuell arbeite ich an einem Projekt für meine Uni, die Erstellung einer sozialen Netzwerkanalyse. Dafür lese ich den Twitter Stream aus und das funktioniert auch soweit. Das Problem ist bei dem nachfolgenden Versuch, die ausgelesenen Tweets in eine XML Datei zu schreiben.

Die Fehlermeldung:

Code: Alles auswählen

TypeError: cannot serialize b'{"data":{"id":"1400875720344227840","text":"RT @jouwatch: Wie Dr. Fauci den Ursprung von Corona vertuschen\xc2\xa0wollte https://t.co/yLlexiNIdy"},"matching_rules":[{"id":1400875754578132999,"tag":"corona"}]}' (type bytes)
Relevanter Code:

Code: Alles auswählen

tweets = Element('tweets')
    tweet = SubElement(tweets, 'tweet')
    
    
    def get_stream(headers, set, bearer_token):
    response = requests.get(
        "https://api.twitter.com/2/tweets/search/stream", headers=headers, stream=True,
    )
    print(response.status_code)
    if response.status_code != 200:
        raise Exception(
            "Cannot get stream (HTTP {}): {}".format(
                response.status_code, response.text
            )
        )

    tweets = Element('tweets')
    tweet = SubElement(tweets, 'tweet')
    for response_line in response.iter_lines():

        SubElement(tweet, 'text', text=response_line)

        output_file = open('twitter_data.xml', 'w')
        output_file.write('<?xml version="1.0"?>')
        output_file.write(ElementTree.tostring(tweets).decode())
        output_file.close()
Mit dem Encoding/Decoding habe ich bereits einiges ausprobiert. Und wenn ich manuell ein Element erstelle und das in die XML schreibe, dann funktioniert es.
Ich stehe ziemlich auf dem Schlauch, hat jemand von euch einen Hinweis für mich, was ich falsch mache bzw. übersehe?

Freundliche Grüße,

Nydiro
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

iter_lines scheint Bytes zurückzuliefern. Und zwar eine Json kodiertes Wörterbuch. Das so in eine XML-Datei schreiben zu wollen, ist wenig sinnvoll. Auch überschreibst Du ständig die selbe Datei!
Lese das Wörterbuch mit response.json() u d mach damit, was Du auch immer damit machen sollst.
Benutzeravatar
__blackjack__
User
Beiträge: 13079
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Nydiro: Ergänzend: Die XML-Datei sollte man explizit mit UTF-8 als Kodierung öffnen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten