Eu só quero descarregue esta URL ... mas ele está me dando um erro! ... unicode .. (Python)

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

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
Foi útil?

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')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top