如何使用Scrapy编码

时间:2015-03-19 13:49:30

标签: python mysql encoding utf-8 scrapy

我在使用Scrapy时遇到了编码问题,希望有人可以帮助我。

  • 在我的蜘蛛上:item['title'] = html.xpath('.//h5/text()')
  • 关于管道:item['title'] = item['title'].extract()[0].encode('utf-8', 'replace')

结果字符串如Namontana \xe2\x80\x93 Une attaque \xc3\xa0 main arm\xc3\xa9e avort\xc3\xa9e。我保存数据库上的所有项目(现在是mysql)。

现在我想将所有这些项目展示给网站,但我的问题是我无法将 \ xe2 (例如)转换为可视化字符。

我已经尝试过了:

  • 在所有.py文件的开头添加# -*- coding: utf-8 -*-
  • 使用PHP代码显示时使用htmlentitiesutf8_decode函数
  • 在我的蜘蛛上添加unicode(response.body.decode(response.encoding)).encode('utf-8')
  • <meta http-equiv="content-type" content="text/html; charset=utf-8" />添加到我的HTML页面
  • 检查并将所有文件转换为UTF8,无需BOM

目前,我唯一的选择是使用自定义函数替换所有字符(解释here)但我认为它们是更好的解决方案。

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

e28093是针对EN DASH的utf8编码的十六进制:http://www.fileformat.info/info/unicode/char/2013/index.htm

c3a0和c3a9代表重音字母:

mysql> SELECT UNHEX('e28093c3a0c3a9');
+-------------------------+
| UNHEX('e28093c3a0c3a9') |
+-------------------------+
| –àé                     |
+-------------------------+

我不知道提供&#34; \ x&#34;是什么,但这是十六进制的常见引导。

如果SELECT出现了\ x等,那么这不是存储数据的好方法。如果SELECT HEX(column)出现...e28093...,那就很好。

答案 1 :(得分:0)

问题来自我的数据库编码。现在它是utf8_unicode_ci,它的效果很好。

答案 2 :(得分:0)

我的解决方案是添加

# -*- coding: utf-8 -*-

在每个文件(蜘蛛,管道等等)和转换(在管道上)字符串从unicode到utf8 [.encode(&#39; utf-8&#39;,&#39;替换&#39;) ]