Eu só quero descarregue esta URL ... mas ele está me dando um erro! ... unicode .. (Python)
Pergunta
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
Por favor, dê uma olhada na parte unicode. Eu tentei essas duas opções ... mas não funciona.
htmlSource = htmlSource.encode('utf8')
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 370747: ordinal not in range(128)
e também isso quando eu tento a mais método de codificação ...
_mysql_exceptions.Warning: Incorrect string value: '\xE7\xB9\x81\xE9\xAB\x94...' for column 'html' at row 1
Solução
Seus dados html é uma cadeia que vem da internet já codificado com alguns codificação. Antes de codificar para utf-8
, você devem decodificá-lo primeiro .
Python é implicitamente tentando decodificá-lo (é por isso que você começa um UnicodeDecodeError
não UnicodeEncodeError
).
Você pode resolver o problema, explicitamente decodificar seu bytestring (usando a codificação apropriada) antes tentando reencode-lo para utf-8
.
Exemplo:
utf8encoded = htmlSource.decode('some_encoding').encode('utf-8')
Use a codificação correta a página foi codificado em primeiro lugar, em vez de 'some_encoding'
.
Você Have para saber qual codifica uma string é usando antes que você possa decodificá-lo.
Outras dicas
Não decodificar? htmlSource = htmlSource.decode('utf8')
descodificação significativo "descodificar HtmlSource de codificação UTF-8"
encode média "codificar HtmlSource a codificação utf8"
desde que você está extraindo os dados existentes (rastejando no site), você precisa decodificá-lo, e quando você insere a mysql, você pode precisar de codificação como utf8 de acordo com suas mysql db / mesa / campos agrupamentos.
Provavelmente você quiser decodificação Utf8, não codificação -lo:
htmlSource = htmlSource.decode('utf8')