2015-09-05 39 views
2

我想重写一个正式的Scrapy教程(http://doc.scrapy.org/en/latest/intro/tutorial.html) 代码与俄罗斯网站habrahabr.ru。Scrapy屈服utf-8

这里是我的代码:

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'} 

我怎样才能改变这是havior?

+0

你想做什么就做什么? – Kevin

+0

使用该命令scrapy runspider habrahabr.py -o habra_intresting.json它必须将标题写入json文件 –

+1

您向我们展示了它实际输出的内容,但不是您希望它输出的内容。 – Kevin

回答

1

如果我明白你的意思,你会感到困惑,因为你得到的价值不像西里尔文。但实际上一切都很好,你会得到正确的价值。该字符串只是自动编码为unicode。要查看可读/西里尔值,你可以这样做:

#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) 

结果将是:

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