Unterschiedliches Skriptverhalten Python/IPython

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
bowie_22
User
Beiträge: 7
Registriert: Mittwoch 28. Oktober 2009, 07:14

Hallo Zusammen,

ich spiele gerade mit requests und bs4 herum und habe folgendes Script einmal aus der Python Konsole und einmal aus der IPython Konsole gestartet.

Code: Alles auswählen

if __name__ == '__main__':
    pass


import requests
import bs4

adresse3 = "https://www.springerprofessional.de/im-fokus-automobil-motoren/47326"
res = requests.get(adresse3)
soup = bs4.BeautifulSoup(res.text, 'html.parser')

print(soup.prettify())
print(res.text)
Dabei bekomme ich unterschiedliches Verhalten ?!.

IPython: Skript läuft ohne Murren durch
Python: Fehlermeldung

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Users\Bowie\Documents\30_DEV\10_Python\web_scraping\src\htmls_auswerten.py", line 19, in <module>
    print(soup.prettify())
UnicodeEncodeError: 'latin-1' codec can't encode character '\u25bc' in position 15650: ordinal not in range(256)
Hat irgendjemand evtl. eine Idee woran das liegen kann?
Ich arbeite unter Win10 + Anaconda mit Python 3.5.2 und IPython 5.1.0

Danke!

Gruß

Marcus
Zuletzt geändert von Anonymous am Donnerstag 29. Dezember 2016, 10:46, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

@bowie_22: Ich vermute mal das IPython die Konsole in der es läuft unter Windows umkonfiguriert damit alle Unicode-Zeichen ausgegeben werden können, während die normale Python-Shell alles so lässt wie sie es vorgefunden hat. Wobei 'latin-1' in dem Falle sehr komisch ist, denn unter Windows ist das eigentlich cp850 oder cp1251.

Der Text enthält jedenfalls Zeichen die sich nicht als Latin-1 kodieren lassen. Speziell in diesem Fall stolpert das Programm über Dieses Zeichen: ▼. Das gibt es in Latin-1 nicht.

Man muss bei Unicode explizit (de)kodieren, wenn man sicher sein will was da passiert, statt sich auf geratene Kodierungen zu verlassen. Und es kann sein, dass man nicht alle Daten in einer bestimmten Kodierung darstellen kann. Da muss man sich dann überlegen wie man damit umgehen möchte.
Antworten