Как использовать процессоры Scrapy Loader для длительных функций? - PullRequest
0 голосов
/ 12 мая 2018

Я начинаю использовать загрузчики элементов, и в примерах для очистки текста используются процессоры загрузчиков, такие как mapcompose, например:

clean_text = Compose(MapCompose(lambda v: v.strip()), Join())   
test = ['item1', 'item2', 'item3']
clean_text(test)

Возвращает:

u'item1 item2 item3'

Теперь я смотрю другой вывод, для того же ввода мне нужны данные, разделенные запятыми, и, поскольку я работаю с файлами .csv, я также цитирую текст, чтобы не нарушать формат.

'"""item1,item2,item3"""'

Для этого я написал эту функцию:

def quote_field(text):
    text = ','.join([v.strip() for v in text ])
    return '"""' + text.strip() + '"""'

Как я могу реализовать загрузчики предметов?

1 Ответ

0 голосов
/ 12 мая 2018

Вы очень близки.Сначала вы должны понять Compose и MapCompose классы.Compose предназначен для применения некоторых функций к списку элементов, в то время как MapCompose используется для применения некоторых функций к каждому элементу в списке элементов.

Итак, вы хотите:

from scrapy.loader.processors import MapCompose, Compose, Join

clean_text = Compose(
    MapCompose(str.strip), # strip every item in list
    MapCompose(lambda item: f'"{item}"'),  # wrap every value in quotes
    Join(','),  # join all items in list as one using , as separator
)

Если вы проверите это:

test = ['item1', 'item2', 'item3']
clean_text(test)
#'item1,item2,item3'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...