Seite 1 von 1

TypeError cannot serialize (type bytes), ElementTree

Verfasst: Freitag 4. Juni 2021, 19:12
von Nydiro
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

Re: TypeError cannot serialize (type bytes), ElementTree

Verfasst: Freitag 4. Juni 2021, 19:35
von Sirius3
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.

Re: TypeError cannot serialize (type bytes), ElementTree

Verfasst: Freitag 4. Juni 2021, 19:52
von __blackjack__
@Nydiro: Ergänzend: Die XML-Datei sollte man explizit mit UTF-8 als Kodierung öffnen.