Загрузчики элементов - это удобная абстракция, которая позволяет повторно использовать код извлечения для нескольких пауков в рамках данного проекта Scrapy.
Допустим, у вас есть проект Scrapy для очистки данных от нескольких-commerces.У вас будет несколько пауков (скорее всего, по одному для каждого веб-сайта), но все они будут использовать одну и ту же схему для данных, которые вы извлекаете.Допустим, ваш класс ProductItem
выглядит следующим образом:
class ProductItem(scrapy.Item):
name = scrapy.Field()
price = scrapy.Field()
...
Теперь предположим, что на некоторых веб-сайтах поле price
содержит запятые в качестве разделителей в цене, например 1,459.99
.Если вы хотите избавиться от этой запятой, чтобы стандартизировать вывод для этого поля, вам придется смешивать логику форматирования внутри вашего паука, и это может легко привести к путанице.
Если вы создаете ItemLoader
для вашего ProductItem
класса вы можете определить процессоры для каждого поля, чтобы вам не приходилось добавлять код форматирования в свои пауки.Примерно так:
from scrapy.loader import ItemLoader
from scrapy.loader.processors import MapCompose
class ProductItemLoader(ItemLoader):
default_item_class = ProductItem
# an input processor for your price field
price_in = MapCompose(lambda x: x.replace(',', ''))
Теперь, когда вы используете это в своих пауках:
loader = ProductItemLoader(response=response)
loader.add_css('price', '#price::text')
...
yield loader.load_item()
Будет вызываться процессор ввода для поля price
для форматирования поля дляyou.
Я рекомендую вам прочитать документацию по загрузчикам элементов , чтобы лучше понять приведенный выше пример.
TL; DR: *Загрузчики предметов 1029 * - это удобство, которое Scrapy предлагает, чтобы помочь вам лучше организовать своих пауков, избегая смешивания правил форматирования (например) в вашем коде паука.