编码不当反应

2024-09-27 07:19:41 发布

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

当我昨天试用Scrapy时,我试图获取一个中文Ruby论坛的帖子标题。但是,Scrapy的输出都是Unicode,就像

"[\u5317\u4eac][2017\u5e746\u670818\u65e5] Rails Girls"

我检查了响应的编码是UTF-8,并打印出了正确显示汉字的body内容。在

所以,我不明白为什么我使用Scrapy选择器来选择标题并将输出放入Json文件。然后,文件的内容都是字符指针,比如\u5317。任何帮助都将不胜感激。谢谢。在

我的代码:

^{pr2}$

Tags: 文件标题内容unicode论坛帖子scrapyrails
1条回答
网友
1楼 · 发布于 2024-09-27 07:19:41

当Scrapy使用URL的响应调用回调时,响应包含解码的Unicode主体内容,即response.text,以及接收到的主体的“原始”字节(无论使用什么编码),如response.body。在

当您使用从response.xpath()response.css()调用中获取的废选择器,并对它们调用.extract()时,您将得到Python Unicode字符串。在

Python2.7使用\uXXXX转义序列来表示它们。这就是您在控制台日志中看到的结果。在

但如果在这些字符串上调用print,则会看到字符本身:

$ scrapy shell https://ruby-china.org/topics
2017-05-23 13:15:33 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
(...)
2017-05-23 13:15:33 [scrapy.core.engine] INFO: Spider opened
2017-05-23 13:15:35 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://ruby-china.org/topics> (referer: None)
(...)
>>> for topic in response.css('div.topic'):
...     title = topic.css('div.media-heading')
...     print(title.css('a ::attr(title)').extract_first())
... 
[北京][2017年6月18日] Rails Girls 复活啦 2017 北京活动报名 | 少女们一天学编程
招 ruby 开发偏执狂,分享产品成果
challenge #1
[上海/成都] Le Wagon 编程训练营招聘 Ruby 导师,2200/ 天
量产型炮灰工程师
如果开发公众号内的小应用,rails 前端搭配哪个框架,vue?react?angular?
[长沙] Kdan Mobile 招聘 Ruby on Rails 工程师 (9K~15K)
Ruby 开发有什么新的进展吗?PHP 貌似要上 JIT 了!
这种需要强行增加对象阅读数,有其他建议吗?
rails 项目,production 模式在 ie8 下报"'undefined' 为空或不是对象"错误
pwc (sdc) 招后端,前端,区块链应用开发。
我想做个类似 app 中的消息中心,比如我下完订单,就会提示我订单的状态!
[上海] 郎客信息技术有限公司招聘 Rails 实习生 2 名
Rails 5.1 使用 yarn 和 webpack 实战 (vue, 构建等)
 [上海] 赛若福诚聘 Ruby 工程师
[上海&杭州] Change 健身潮流文化社区招收 Ruby 工程师 (15-40k 十四薪)
[宁波] 新希望软件 Ruby 工程师 3 名 [8k~12k] 
如何禁用下拉列表
為你自己學 Ruby on Rails
使用 RSpec 在 Rails 5 下测试邮件的发送
GitHub API v4 改用 GraphQL 了
[上海] 2017.5.21 Elixir Meetup
多态情况下关联表查询问题
Rails 与 Django 性能的疑问
[北京] 西单,金融方向,欢迎 Ruby 大牛 [15k~30k]
云梯正式开通 Telegram 官方频道
>>> 

现在,如果您将条目导出为JSON,例如使用-o items.json,那么默认情况下,Scrapy还将在不同项的JSON字符串中编写\uXXXX转义序列。这与python2.7如何表示非ASCII字符相同,这是100%有效的JSON输出,实际上是Python的json模块(称为ensure_ascii)的默认输出。在

如果在JSON输出文件中确实需要UTF-8字符,可以使用Scrapy的^{} setting。在

相关问题 更多 >

    热门问题