wake-up-neo.com

Wie wird mit der Antwortcodierung von urllib.request.urlopen () verfahren?

Ich versuche, eine Webseite mit regulären Ausdrücken zu durchsuchen, erhalte jedoch die folgende Fehlermeldung:

TypeError: Es kann kein Zeichenfolgenmuster für ein bytesähnliches Objekt verwendet werden

Ich verstehe, warum urllib.request.urlopen () einen Bytestream zurückgibt, und so weiß ich zumindest, dass er die zu verwendende Codierung nicht kennt. Was soll ich in dieser Situation tun? Gibt es eine Möglichkeit, die Kodierungsmethode in einer URL-Anforderung anzugeben, oder muss ich die Zeichenfolge selbst neu kodieren? Wenn ja, was soll ich tun, gehe ich davon aus, dass ich die Kodierung aus der Kopfzeileninformation oder den Kodierungstyp lesen sollte, wenn dies in der HTML-Datei angegeben ist, und diese dann erneut kodieren?

37
kryptobs2000

Sie müssen nur die Antwort entschlüsseln, wobei der Content-Type-Header normalerweise der letzte Wert ist. Es gibt ein Beispiel in das Tutorial .

output = response.decode('utf-8')
38
Senthil Kumaran

Für mich ist die Lösung wie folgt (Python3):

resource = urllib.request.urlopen(an_url)
content =  resource.read().decode(resource.headers.get_content_charset())
73
Ivan Klass

Ich hatte die gleichen Probleme für die letzten zwei Tage. Ich habe endlich eine Lösung. Ich verwende die info()-Methode des von urlopen() zurückgegebenen Objekts:

req=urllib.request.urlopen(URL)
charset=req.info().get_content_charset()
content=req.read().decode(charset)
6
pytohs

Mit Anfragen :

import requests

response = requests.get(URL).text
6
xged
urllib.urlopen(url).headers.getheader('Content-Type')

Wird so etwas ausgeben:

text/html; charset=utf-8

0
wynemo