Scrapy输出提供国际unicode字符(例如日语字符)

for*_*ice 7 python unicode scrapy

我是python和scrapy的新手,我正在关注dmoz教程.作为教程建议的起始URL的一个小变体,我从dmoz示例站点中选择了一个日语类别,并注意到我最终获得的feed导出显示的是unicode数值而不是实际的日语字符.

看起来我需要以某种方式使用TextResponse,但我不知道如何让我的蜘蛛使用该对象而不是基本的Response对象.

  1. 我应该如何修改我的代码以在输出中显示日语字符?
  2. 如何摆脱方括号,单引号和包含输出值的'u'?

最终,我希望有一个输出说

オンラインショップ(这些是日本字符)

而不是当前的输出

[u'\ u30aa\u30f3\u30e9\u30a4\u30f3\u30b7\u30e7\u30c3\u30d7'](unicodes)

如果您查看我的屏幕截图,它对应于单元格C7,其中一个文本标题.

这是我的蜘蛛(与教程中的蜘蛛相同,除了不同的start_url):

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector

from dmoz.items import DmozItem

class DmozSpider(BaseSpider):
   name = "dmoz.org"
   allowed_domains = ["dmoz.org"]
   start_urls = [
       "http://www.dmoz.org/World/Japanese/"
   ]

   def parse(self, response):
       hxs = HtmlXPathSelector(response)
       sites = hxs.select('//ul/li')
       items = []
       for site in sites:
           item = DmozItem()
           item['title'] = site.select('a/text()').extract()
           item['link'] = site.select('a/@href').extract()
           item['desc'] = site.select('text()').extract()
           items.append(item)
       return items
Run Code Online (Sandbox Code Playgroud)

settings.py:

FEED_URI = 'items.csv'
FEED_FORMAT = 'csv'
Run Code Online (Sandbox Code Playgroud)

输出截图:http: //i55.tinypic.com/eplwlj.png(抱歉,我还没有足够的SO点发布图片)

Aco*_*orn 1

当您从页面中抓取文本时,它会以 Unicode 格式存储。

您想要做的是将其编码为 UTF8 之类的内容。

unicode_string.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

此外,当您使用选择器提取文本时,即使只有一个结果,它也会存储在列表中,因此您需要选择第一个元素。