2017-05-23 6 views
1

어제 Scrapy을 사용해 보았을 때 중국 루비 포럼 게시물의 제목을 가져 오려고했습니다. 하지만, 어떻게 든 Scrapy의 출력은 내가 응답의 인코딩이 UTF-8입니다 체크 아웃 한부적절한 응답의 인코딩

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

처럼, 모든 Unicode하고 내가 제대로 중국어 문자를 보여 본문의 내용을 인쇄.

그래서 저는 Scrapy selector를 사용하여 제목을 선택하고 출력을 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()} 

답변

1

Scrapy이 URL에 대한 응답으로 콜백을 호출, 응답이 response.text으로, 디코딩 된 유니 코드 본문 내용을 포함하고, 수신 된 신체의 "원시"바이트에서 사용 된 인코딩은 모두 response.body입니다.

response.xpath() 또는 response.css() 전화에서 얻은 치료 선택기를 사용하고 .extract()을 호출하면 Python 유니 코드 문자열이 생깁니다.

파이썬 2.7에서는 \uXXXX을 사용하여 이스케이프 시퀀스를 표현합니다. 그 결과 콘솔 로그에서 볼 수 있습니다. 당신이 그 문자열에 인쇄를 호출하는 경우

는하지만, 당신은 문자 자체 참조 : 당신은 기본적으로 -o items.json으로 예를 들어, JSON로 항목을 내보낼 경우, 지금

$ 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 官方频道 
>>> 

을 Scrapy뿐만 아니라 \uXXXX를 작성합니다 다른 항목의 JSON 문자열에서 이스케이프 시퀀스. Python 2.7이 ASCII가 아닌 문자를 나타내는 방식과 동일합니다. 이는 100 % 유효한 JSON 출력이며 사실 Python의 json 모듈의 기본값입니다 (ensure_ascii이라고 함).

JSON 출력 파일에 실제로 UTF-8 문자가 필요한 경우 Scrapy의 FEED_EXPORT_ENCODING='utf-8' setting을 사용할 수 있습니다.

+0

정확하고 자세한 답변을 보내 주셔서 감사합니다. –