Seite 1 von 1

Unterschiedliches Skriptverhalten Python/IPython

Verfasst: Donnerstag 29. Dezember 2016, 08:29
von bowie_22
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

Re: Unterschiedliches Skriptverhalten Python/IPython

Verfasst: Donnerstag 29. Dezember 2016, 10:56
von 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.