Python+Scrapy+MySQL UTF8编码

2024-09-30 20:16:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个破烂的代码,抓取一个网站并写入MySQL

import MySQLdb.cursors

def __init__(self,stats):
    self.dbpool = adbapi.ConnectionPool(<dbnam>,host=<host>,user=<user>,port=<port>,passwd=<pwd>, db=<dbname>, cursorclass=MySQLdb.cursors.DictCursor, charset='utf8', use_unicode=True)

def process_item(self, item, spider):
    query = self.dbpool.runInteraction(self._conditional_insert, item)
    query.addErrback(self.handle_error)

表中数字列表的废脚本

^{pr2}$

我正在抓取以下内容:10〃11〃12〃等。我的代码返回以下内容:

'numbers': [u'10\u2033', u'11\u2033', u'12\u2033'],

将它插入MySQL数据库会抛出一条错误消息-我猜是由于unicode问题。在

tx.execute("""INSERT INTO numbers ('{0}').format(", ".join(item['numbers'])))

请你帮忙使插入成功。更好的是,如何从列表中删除特殊字符'\u2033'?在

提前谢谢!在


Tags: 代码selfhostportdefmysqlunicodeitem
1条回答
网友
1楼 · 发布于 2024-09-30 20:16:47

您可能得到了一个UnicodeEncodeError,因为您试图将包含非ascii字符的unicode字符串插入字节字符串。在

要解决此问题,请确保查询字符串具有u前缀:

tx.execute(u"""INSERT INTO numbers ('{0}')""".format(", ".join(item['numbers'])))

如果你真的想摆脱那些双撇号,我想你可以用双引号代替它们:

^{pr2}$

但我认为最好确保代码可以处理任何unicode字符,也就是说,您应该始终在程序中使用unicode字符串。在

相关问题 更多 >