Python BeautifulSoup与MySql编码错误
我正在使用BeautifulSoup这个Python库。
我用urllib2库从一个网页下载了HTML代码,然后用BeautifulSoup解析了它。
我想把一些HTML内容保存到MySql表里,但在编码方面遇到了一些问题。MySql表的编码是'utf-8'。
举几个例子:
当我下载HTML代码并用BeautifulSoup解析后,我得到的内容是这样的:
"Ver las \xc3\xbaltimas noticias. Ent\xc3\xa9rate de las noticias de \xc3\xbaltima hora con la mejor cobertura con fotos y videos"
正确的文本应该是:
"Ver las últimas noticias. Entérate de las noticias de última hora con la mejor cobertura con fotos y videos"
我尝试用多种编码方式对这个文本进行编码和解码,但当我把它插入到MySql时,得到的结果是:
"Ver las últimas noticias y todos los titulares de hoy en Yahoo! Noticias Argentina. Entérate de las noticias de última hora con la mejor cobertura con fotos y videos"
我在编码方面遇到了问题,但不知道该怎么解决。
有没有什么建议?
2 个回答
BeautifulSoup会把所有的数据都返回为unicode字符串。首先要仔细检查这些unicode字符串是否正确。如果不正确,那就说明输入的数据在编码上有问题。
你从BeautifulSoup得到的UTF-8数据是正确的,但它被存储为普通字符串类型,而不是Python的原生Unicode字符串类型。我认为你需要这样做:
codecs.decode(your_string, 'utf-8')
这样一来,这个字符串就会是正确的数据类型和编码,可以发送到MySQL数据库了。
举个例子:
>>> codecs.decode("Ver las \xc3\xbaltimas noticias. Ent\xc3\xa9rate de las noticias de \xc3\xbaltima hora con la mejor cobertura con fotos y videos", 'utf-8')
u'Ver las \xfaltimas noticias. Ent\xe9rate de las noticias de \xfaltima hora con la mejor cobertura con fotos y videos'
>>> print _
Ver las últimas noticias. Entérate de las noticias de última hora con la mejor cobertura con fotos y videos