gpt4 book ai didi

python - Scrapy响应编码不当

转载 作者:太空宇宙 更新时间:2023-11-03 15:12:16 25 4
gpt4 key购买 nike

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

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

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

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

我的代码:

import scrapy

class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['https://ruby-china.org/topics']

def parse(self, response):
self.logger.warning("body: %s", response.body)
for topic in response.css('div.topic'):
title = topic.css('div.media-heading')
yield {'title': title.css('a ::attr(title)').extract_first()}

最佳答案

当 Scrapy 使用 URL 响应调用回调时,响应包含解码后的 Unicode 正文内容(如 response.text),以及接收到的正文的“原始”字节(采用任何编码)被用作 response.body

当您使用从 response.xpath()response.css() 调用获得的 Scrapy 选择器时,并且调用 .extract() 在它们上,你会得到 Python Unicode 字符串。

Python 2.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 转义序列不同项目的字符串。它与 Python 2.7 表示非 ASCII 字符的方式相同,这是 100% 有效的 JSON 输出,实际上是 Python 的 json 模块的默认设置(称为 ensure_ascii) .

如果你确实需要在 JSON 输出文件中使用 UTF-8 字符,你可以使用 Scrapy 的 FEED_EXPORT_ENCODING='utf-8' setting .

关于python - Scrapy响应编码不当,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44128899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com