python - 如何使用Scrapy编码

标签 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(例如)转换为可视字符。

我已经试过了:

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

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

预先感谢您的帮助。

最佳答案

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

c3a0 和 c3a9 代表重音字母:

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

我不知道是什么提供了“\x”,但这是十六进制的常见前导符。

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

关于python - 如何使用Scrapy编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29146383/

相关文章:

python - 从列表的第一个元素中删除双引号

php - 使用 'with' 子句的复杂 CDbCriteria

php - 加盐密码?

c# - 在 PHP 中实现阿特伍德的装备我们的 ASCII 盔甲

python - 乘以 RGB 值列表 Python

python - 如何自定义使用 py.test 生成的 html 报告文件?

PHP MySQL 无法解释的空值 - 如何在一条记录中插入所有值?

asp.net - 编码撇号

Linux rpc : Varint for protobuf encoding : not expected value

python - 在 Pandas 中获取每两行不同的新数据框