Size: a a a

2019 July 16

AS

Alexander Serebrov in Scrapy
A B
так парни у меня снова затык, в этот раз с item и ItemLoader. сделал паука, грабит список продуктов, и спавнит реквесты на страницы с товаром. ответы отрабатываю методом
get_infos(self, response, itemloader: ItemLoader)
,  то есть передаю текущий ItemLoader объект, чтобы в там его дополнить нужной инфой. но как-то с этим у меня полная просрация случается. вот минимальный пример: https://pastebin.com/y9r8CN7p

38 строчка должна быть
itemloader.add_css('tags', '.tags.expandable .search__link::text')
лучше пробрасывать айтем через мету meta = {'item': loader.load_item()}, а потом создавать новый лоадер в следующем методе loader = ItemLoader(response=response, item=response.meta['item'])
источник

AB

A B in Scrapy
serhii
не слишком понятна проблема, ошибка какая вызывается, в каком месте кода, скинутого.
что не так:? то, что заполняет
get_infos
тупо игнорится, когда метод
parse
возвращает item
источник

AB

A B in Scrapy
Alexander Serebrov
лучше пробрасывать айтем через мету meta = {'item': loader.load_item()}, а потом создавать новый лоадер в следующем методе loader = ItemLoader(response=response, item=response.meta['item'])
но почему не напрямую? что же там за страшные вещи под капотом происходят.
источник

s

serhii in Scrapy
tags_res - type его какой?
источник

AB

A B in Scrapy
serhii
tags_res - type его какой?
scrapy.http.response.html.HtmlResponse конечно.
источник

i

ildar in Scrapy
а ты уверен что так можно делать?
itemloader = self.get_infos
я к тому, что ты вроде как набрасываешь методами сначала item_loader, а потом переопределяешь переменную, ты уверен, что у тебя он продукт_урл, тайтл и артист сохраняет?
источник

i

ildar in Scrapy
это раз, и два, если шото где-то стопится - то не юзай return, юзай yield
источник

AB

A B in Scrapy
не особо, я посмотрел на пример из inline-requests, и пытался его адаптировать к работе с айтемами
источник

AB

A B in Scrapy
источник

i

ildar in Scrapy
а тебе пичарм желтеньким не подсвечивает двойное определение itemloader?
источник

i

ildar in Scrapy
а чего инлайн реквестс этот вообще делает?
источник

AB

A B in Scrapy
он переопределяет его же собой.
источник

AB

A B in Scrapy
ildar
а тебе пичарм желтеньким не подсвечивает двойное определение itemloader?
он переопределяет его же собой,
сперва, я конечно пробовал просто так вызывать get_infos без присваивания, и столкнулся с этой проблемой, что результат get_infos никуда не записывается.
источник

i

ildar in Scrapy
я вообще пытаюсь ща осмыслить чо эта либа делает)
источник

i

ildar in Scrapy
в стиле, нафига она нужна?
источник

AB

A B in Scrapy
ildar
я вообще пытаюсь ща осмыслить чо эта либа делает)
как я понимаю, позволяет делать несколько реквестов "параллельно"
источник

AB

A B in Scrapy
Alexander Serebrov
лучше пробрасывать айтем через мету meta = {'item': loader.load_item()}, а потом создавать новый лоадер в следующем методе loader = ItemLoader(response=response, item=response.meta['item'])
по быстрому гуглингу так и советуют, спасибо. попробую так.
источник

i

ildar in Scrapy
я пока ничо не понял, но вангую тебе надо как-то вот это:
           item = FreepikScraperItem()
           itemloader = ItemLoader(item=item, selector=article)
засунуть внутрь get_infos, чтобы он оттуда такой модный возвращалсо,и убрать эти строчки из parse
источник

i

ildar in Scrapy
и этот вот вызов на самый верх передвинуть, что-ли... itemloader = self.get_infos(tags_res, itemloader)
источник

AB

A B in Scrapy
get_infos парсит совсем другой респонс
источник