Документация Scrapy перечисляет все встроенные методы экземпляров ItemLoader и объясняет , как объявлять ваши собственные загрузчики элементов .Однако любые объявленные вами загрузчики элементов будут применяться ко всем обработанным элементам.Вы можете немного изменить их поведение с помощью Контекстов загрузчика элементов , но это часто недостаточно детально.
Предположим, у меня есть проект Scrapy, где все пауки и элементы наследуют одного и того же базового паука изагрузчики предметов, но все пауки содержат специфичную для сайта логику с несколькими общими функциями.Нигде в документации по Scrapy я не нахожу упоминания о добавлении методов класса в ItemLoaders, чтобы вместо:
import mymodule
class MySpider(BaseSpiderName):
def parse_item(self, response):
product = ItemLoader(item=Product(), response=response)
new_value = mymodule.myfunction(argument, ..., ...)
product.add_value('my_field', new_value)
Вы могли написать:
# (no extra import)
class MySpider(BaseSpiderName):
def parse_item(self, response):
product = CustomItemLoader(item=Product(), response=response)
product.custom_function(argument, ..., ...)
Даже если это кажется очевидным способомРасширить ItemLoaders, как вы бы это делали для любого другого класса, это не документировано, и я не вижу примеров того, как сделать это в Scrapy, где бы я ни проверял (Google, StackOverflow).Возможно ли это / поддерживается и как бы вы их объявили?