【问题标题】:Scrapy yield utf-8Scrapy 产量 utf-8
【发布时间】:2015-09-05 12:56:35
【问题描述】:

我正在尝试重写官方的 Scrapy 教程 (http://doc.scrapy.org/en/latest/intro/tutorial.html) 俄罗斯网站 habrahabr.ru 的代码。

这是我的代码:

import scrapy


class DmozSpider(scrapy.Spider):
    name = 'habr'

    allowed_domains = ['habrahabr.ru']

    start_urls = [
        'http://habrahabr.ru/interesting/'
    ]

    def parse(self, response):
        yield {'title': response.xpath('//title/text()').extract()[0]}

它返回:{'title': u'\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 / \u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440'}

当我尝试时:

 yield {'title': response.xpath('//title/text()').extract()[0].encode('utf-8')}

返回:

{'title': '\xd0\x98\xd0\xbd\xd1\x82\xd0\xb5\xd1\x80\xd0\xb5\xd1\x81\xd0\xbd\xd1\x8b\xd0\xb5 \xd0\xbf\xd1\x83\xd0\xb1\xd0\xbb\xd0\xb8\xd0\xba\xd0\xb0\xd1\x86\xd0\xb8\xd0\xb8 / \xd0\xa5\xd0\xb0\xd0\xb1\xd1\x80\xd0\xb0\xd1\x85\xd0\xb0\xd0\xb1\xd1\x80'}

如何改变这种行为?

【问题讨论】:

  • 你想让它做什么?
  • 使用该命令 scrapy runspider habrahabr.py -o habra_intresting.json 它必须将标题写入 json 文件
  • 您向我们展示了它实际输出的内容,但不是您希望它输出的内容。

标签: python encoding utf-8 scrapy


【解决方案1】:

转到setting.py 文件并将FEED_EXPORT_ENCODING 选项设置为utf-8。

FEED_EXPORT_ENCODING = "utf-8"

这将解决您的问题。

【讨论】:

    【解决方案2】:

    如果我猜对了,你会感到困惑,因为你得到的值看起来不像西里尔文字。但实际上一切都很好,你得到了正确的值。字符串只是自动编码为 un​​icode。要查看可读/西里尔文值,您可以这样做:

    #Python - 2
    title = u'\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 / \u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440'
    print(title.encode('utf-8'))
    
    
    #Python - 3
    title = u'\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 / \u0425\u0430\u0431\u0440\u0430\u0445\u0430\u0431\u0440'
    print(title)
    

    结果将是:

    Интересные публикации / Хабрахабр
    

    【讨论】:

      猜你喜欢
      • 2023-03-15
      • 2018-01-16
      • 2016-08-24
      • 1970-01-01
      • 2017-04-17
      • 2017-02-08
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多