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

时间:2011-05-31 18:31:05

标签: python unicode scrapy

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

似乎我需要以某种方式使用TextResponse,但我不确定如何让我的蜘蛛使用该对象而不是基本的Response对象。

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

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

    而不是

    的当前输出

    [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
    

    settings.py:

    FEED_URI = 'items.csv'
    FEED_FORMAT = 'csv'
    

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

1 个答案:

答案 0 :(得分:1)

当您从页面中删除文本时,它将以Unicode格式存储。

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

unicode_string.encode('utf-8')

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