J'essaie de rechercher une page Web à l'aide d'expressions régulières, mais l'erreur suivante s'affiche:
TypeError: impossible d'utiliser un modèle de chaîne sur un objet de type octet
Je comprends pourquoi, urllib.request.urlopen () renvoie un flux de données et donc, au moins, je suppose, re ne connaît pas l’encodage à utiliser. Qu'est-ce que je suis censé faire dans cette situation? Y at-il un moyen de spécifier la méthode de codage dans un urlrequest peut-être ou devrai-je recoder la chaîne moi-même? Si oui, qu'est-ce que je cherche à faire, je suppose que je devrais lire le codage à partir des informations d'en-tête ou du type de codage, si spécifié dans le code HTML, puis le recoder à nouveau pour cela?
Il vous suffit de décoder la réponse, en utilisant l'en-tête Content-Type
, généralement la dernière valeur. Il y a un exemple donné dans le tutoriel aussi.
output = response.decode('utf-8')
Quant à moi, la solution est la suivante (python3):
resource = urllib.request.urlopen(an_url)
content = resource.read().decode(resource.headers.get_content_charset())
J'ai eu les mêmes problèmes au cours des deux derniers jours. J'ai enfin une solution. J'utilise la méthode info()
de l'objet renvoyé par urlopen()
:
req=urllib.request.urlopen(URL)
charset=req.info().get_content_charset()
content=req.read().decode(charset)
Avec demandes :
import requests
response = requests.get(URL).text
urllib.urlopen(url).headers.getheader('Content-Type')
Produira quelque chose comme ceci:
text/html; charset=utf-8