Ich versuche, eine Website zu kratzen, aber es gibt mir einen Fehler.
Ich verwende den folgenden Code:
import urllib.request
from bs4 import BeautifulSoup
get = urllib.request.urlopen("https://www.website.com/")
html = get.read()
soup = BeautifulSoup(html)
print(soup)
Und ich bekomme folgenden Fehler:
File "C:\Python34\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 70924-70950: character maps to <undefined>
Was kann ich tun, um dies zu beheben?
python
beautifulsoup
urllib
SstrykerR
quelle
quelle
Ich habe es durch Hinzufügen
.encode("utf-8")
zu behobensoup
.Das heißt das
print(soup)
wirdprint(soup.encode("utf-8"))
.quelle
bytes
Objekts, das als Durcheinander von\x
Sequenzen gedruckt wird, wenn viel UTF-8-codierter Text vorhanden ist. Ich empfehle die Verwendungwin_unicode_console
, wie @JFSebastian vorschlägt.b'\x02x\xc2\xa9'
stattdessenprint(soup.encode("utf-8"))
arbeitete für mich, aber vorher musste ich auch hinzufügenwith open("f_name", encoding="utf-8") as f: soup = BeautifulSoup(f, "html.parser")
In Python 3.7 und unter Windows 10 hat dies funktioniert (ich bin nicht sicher, ob es auf anderen Plattformen und / oder anderen Versionen von Python funktioniert).
Diese Zeile ersetzen:
with open('filename', 'w') as f:
Mit diesem:
with open('filename', 'w', encoding='utf-8') as f:
Der Grund, warum es funktioniert, liegt darin, dass die Codierung bei Verwendung der Datei in UTF-8 geändert wird, sodass Zeichen in UTF-8 in Text konvertiert werden können, anstatt einen Fehler zurückzugeben, wenn ein UTF-8-Zeichen auftritt nicht durch die aktuelle Codierung unterstützt.
quelle
Beim Speichern der Antwort von get request wurde in Fenster 10 derselbe Fehler in Python 3.7 ausgelöst. Die von der URL empfangene Antwort lautete UTF-8. Es wird daher immer empfohlen, die Codierung zu überprüfen, damit dieselbe übergeben werden kann, um solche trivialen Probleme zu vermeiden da es wirklich viel Zeit in der Produktion tötet
Als ich mit dem Befehl open encoding = "utf-8" hinzufügte, wurde die Datei mit der richtigen Antwort gespeichert
quelle
Sogar ich hatte das gleiche Problem mit der Codierung, die auftritt, wenn Sie versuchen, sie zu drucken, zu lesen / schreiben oder zu öffnen. Wie bereits erwähnt, hilft das Hinzufügen von .encoding = "utf-8", wenn Sie versuchen, es zu drucken.
Wenn Sie versuchen, verkratzte Daten zu öffnen und möglicherweise in eine Datei zu schreiben, öffnen Sie die Datei mit (......, encoding = "utf-8")
quelle
Wenn Sie diesen Fehler weiterhin erhalten, wird dies durch Hinzufügen
encode("utf-8")
zusoup
ebenfalls behoben.quelle
soup
ist keinBeautifulSoup
Objekt mehr, nachdem Sie dies getan haben, so dass es nicht manipuliert oder durchsucht werden kann