Паук Scrapy Python: Сохранение результатов в Latin-1, а не в Unicode - PullRequest
1 голос
/ 28 июня 2011

В настоящее время мой паук выбирает результаты по мере необходимости, но кодирует их в Unicode (UTF-8, я полагаю).Когда я сохраняю эти результаты в csv, у меня есть тонна очистки, которую нужно выполнить, со всеми [u 'и другими символами, которые вставляет Scrapy.

Как именно я буду хранить результаты в виде латинских символов, а не Unicode.Где именно мне нужно внести изменения?

Спасибо.-TM

Ответы [ 2 ]

4 голосов
/ 28 июня 2011

Item_extracted имеет тип Unicode. Вы можете либо закодировать его в латиницу, где он был извлечен (в функции разбора), либо в конвейер элементов или выходной процессор

Самый простой способ - добавить эту строку в функцию разбора

item_to_be_stored = item_extracted.encode('latin-1','ignore')

Или вы можете определить функцию в вашем классе предметов.

from scrapy.utils.python import unicode_to_str

def u_to_str(text):
    unicode_to_str(text,'latin-1','ignore')

class YourItem(Item):
    name = Field(output_processor=u_to_str())
1 голос
/ 28 июня 2011

Если ваша проблема такова, как вы говорите, решение так же просто, как приведение к строке.

>>> a = u'spam and eggs'
>>> a
u'spam and eggs'
>>> type(a)
<type 'unicode'>
>>> b = str(a)
>>> b
'spam and eggs'
>>> type(b)
<type 'str'>

РЕДАКТИРОВАТЬ: зная, что может возникнуть исключение, может быть хорошей идеей будет обернуть этов попытке и за исключением

try:
    str(a)
except UnicodeError:
    print "Skipping string %s" % a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...