Scrapy 输出包含国际 Unicode 字符(例如:日文字符)

7 投票
1 回答
3186 浏览
提问于 2025-04-16 18:42

我刚开始学习Python和Scrapy,正在跟着dmoz的教程走。为了稍微改变一下教程里建议的起始网址,我选择了dmoz示例网站中的一个日本类别,结果发现我最终得到的输出是unicode数字值,而不是实际的日本字符。

看起来我需要以某种方式使用TextResponse,但我不太确定怎么让我的爬虫用这个对象,而不是默认的Response对象。

  1. 我应该怎么修改我的代码,才能在输出中显示日本字符?
  2. 我怎么才能去掉方括号、单引号和包裹在输出值前面的'u'?

最终,我想要的输出是这样的:

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

而不是现在的输出:

[u'\u30aa\u30f3\u30e9\u30a4\u30f3\u30b7\u30e7\u30c3\u30d7'](这些是unicode)

如果你看看我的截图,它对应的是C7单元格,里面有一个文本标题。

这是我的爬虫代码(和教程里的完全一样,只是起始网址不同):

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 个回答

1

当你从网页上抓取文本时,这些文本是以Unicode格式存储的。

你需要做的是把它转换成像UTF8这样的格式。

unicode_string.encode('utf-8')

另外,当你使用选择器提取文本时,即使只有一个结果,它也会被存储在一个列表里,所以你需要选择列表中的第一个元素。

撰写回答