我正在尝试填充Facebook从特定页面(此处为bestbuy)发布数据,通过Graph API(https://github.com/pythonforfacebook/facebook-sdk)提取到mysql表。我正在提取帖子以及对帖子的评论。这里我说的是评论,同样的问题也适用于帖子。对于db模式,字符集设置为utf-8。
现在,当我在数据库中插入注释内容(comment_message)时,我会在插入之前在Python脚本中执行comment_message.encode('utf-8')
。但它不能正常工作,很多字符都被其他一些字符所取代。所以对于以下帖子中的评论 -
https://www.facebook.com/12699262021/posts/10152351243512022
在comment_message.encode('utf-8')
-
HolaÑon -
Muchas gracias por tu pregunta。 En caso de que no hayas tenido el momento,te re comiendo visitarnuestrap├íginaonline http://BestBuy.com
Aqu├¡concontraraslos precios sin impuestos。 Lo impuestosvar├¡ dependiendo la cuidad y la tienda en donde finalices la compra。
Ten en cuenta que todos los productos que compres con BestBuyest├ín destinados al uso de los Estados Unidos,cada producto tiene una garant├¡defabricante e n forma gratuita。 Parasaberm├是detalles de lagarant├¡dedel fabricante,te ac onsejamos que te comuniques con 尼康。
Hasta mi mejor conocimiento,todas nuestras tiendas localizadas en Nueva Yorkestar├ínabiertasel 18 de abril。
Atentamente,Karina
你可以看到很多人物搞砸了。下面是我使用pymysql
-
CREATE TABLE `xxxxxxxxxxxxxx` (
`comment_id` varchar(100) NOT NULL,
`post_id` varchar(100) DEFAULT '-',
`from_name` varchar(100) DEFAULT '-',
`from_category` varchar(50) DEFAULT '-',
`from_id` varchar(50) DEFAULT '-',
`message` varchar(10000) DEFAULT '-',
`created_time` varchar(45) DEFAULT '-',
`likes` int(10) unsigned DEFAULT '0',
`page` varchar(50) DEFAULT '-',
`type` varchar(100) DEFAULT '-',
`inserted_time` varchar(60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
如果我尝试直接插入内容而不进行任何编码,我会 -
sql = sql.encode(self.encoding)
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 148-149:
ordinal not in range(256)
答案 0 :(得分:1)
我在这里发现了这个问题。我需要做两件事来摆脱它 -
首先,在Python脚本中将默认字符集设置为Unicode -
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
其次,在连接到db时,设置参数use_unicode
和charset
-
conn = pymysql.connect(host='xx', user='xx', passwd='xx', db='xx', use_unicode=True, charset='utf8')