Je souhaite simplement télécharger cette URL, mais elle me donne une erreur! & # 8230; unicode .. (Python)

StackOverflow https://stackoverflow.com/questions/1808612

Question

theurl = 'http://bit.ly/6IcCtf/'
urlReq = urllib2.Request(theurl)
urlReq.add_header('User-Agent',random.choice(agents))
urlResponse = urllib2.urlopen(urlReq)
htmlSource = urlResponse.read()
if unicode == 1:
    #print urlResponse.headers['content-type']
    #encoding=urlResponse.headers['content-type'].split('charset=')[-1]
    #htmlSource = unicode(htmlSource, encoding)
    htmlSource =  htmlSource.encode('utf8')
return htmlSource

Veuillez jeter un coup d'œil à la partie unicode. J'ai essayé ces deux options ... mais cela ne fonctionne pas.

htmlSource =  htmlSource.encode('utf8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 370747: ordinal not in range(128)

et aussi lorsque j’essaie la méthode plus longue d’encodage ...

_mysql_exceptions.Warning: Incorrect string value: '\xE7\xB9\x81\xE9\xAB\x94...' for column 'html' at row 1
Était-ce utile?

La solution

Vos données HTML sont une chaîne qui provient d’Internet déjà codé avec un certain codage. Avant de l’encoder en utf-8 , vous devez le décoder d’abord .

Python implicit tente de le décoder (c'est pourquoi vous obtenez un UnicodeDecodeError et non UnicodeEncodeError ).

Vous pouvez résoudre le problème en explicitant le décodage de votre chaîne d'octets (en utilisant l'encodage approprié) avant de essayer de le recoder en utf-8 .

Exemple:

utf8encoded = htmlSource.decode('some_encoding').encode('utf-8')

Utilisez le bon encodage, la page a été encodée en premier lieu, au lieu de 'une_encodage' .

Vous devez savoir quel codage une chaîne utilise avant de pouvoir la décoder.

Autres conseils

Pas décodé? htmlSource = htmlSource.decode ('utf8')

décoder la moyenne "décoder htmlSource à partir du codage utf8"

encodez la moyenne "encodez htmlSource en encodant utf8"

puisque vous extrayez les données existantes (exploration du site Web), vous devez les décoder, et lorsque vous insérez dans mysql, vous devrez peut-être encoder en tant que utf8 en fonction de vos collations mysql db / table / fields.

Vous voulez probablement décoder Utf8, pas le coder :

htmlSource =  htmlSource.decode('utf8')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top