Scrapy выводят международные юникодные символы (например, японские символы) - PullRequest
7 голосов
/ 31 мая 2011

Я новичок в python и scrapy и следую руководству по dmoz. В качестве незначительного варианта предлагаемого начального URL-адреса учебника я выбрал японскую категорию на образце сайта dmoz и заметил, что экспорт фида, который я в итоге получаю, показывает числовые значения Юникода вместо реальных японских символов.

Кажется, мне нужно как-то использовать TextResponse , но я не уверен, как заставить моего паука использовать этот объект вместо базового объекта Response.

  1. Как мне изменить мой код, чтобы отображать японские символы в моем выводе?
  2. Как мне избавиться от квадратных скобок, одинарных кавычек и 'u', которые обертывают мои выходные значения?

В конечном счете, я хочу получить вывод, скажем

オ ン ラ イ ン シ ョ ッ プ (это японские символы)

вместо токового выхода

[u 'u30aa \ u30e9 \ u30a4 \ u30f3 \ u30b7 \ 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 Ответ

1 голос
/ 01 июня 2011

Когда вы счищаете текст со страницы, он сохраняется в Unicode.

То, что вы хотите сделать, это закодировать его во что-то вроде UTF8.

unicode_string.encode('utf-8')

Кроме того, когда вы извлекаете текст с помощью селектора, он сохраняется в списке, даже если результат только один, поэтому вам нужно выбрать первый элемент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...