Size: a a a

2020 December 17

DO

Daniil Okhlopkov in Scrapy
Возможно криминал
источник

DO

Daniil Okhlopkov in Scrapy
Коллеги, здравствуйте! Я опять с вопросиком.

В своем коде я наплодил кучу scrapy.Item. Один спайдер бегает по сайту и парсит много разных объектов. Теперь я хочу класть каждый объект в свою SQL таблицу в Postgres/BigQuery, но, как я понял, через каждый ItemPipeline проходят сразу все созданные Items.

Расскажите, пожалуйста, Best Practices, как нужно работать с разными Items от одного Spider?
источник

AR

Andrey Rahmatullin in Scrapy
isinstance
источник

DO

Daniil Okhlopkov in Scrapy
Понял. Раз это Best Practices - буду так делать. Я просто сомневался
источник

DO

Daniil Okhlopkov in Scrapy
Еще вопрос. Добавляя значения в Item через add_value или add_xpath, они все аппендятся и в результате получаются списки из одного элемента. Чтобы такого не было, нужно в описание класса Item везде написать output_processor=TakeFirst()?
источник

1

15821 in Scrapy
А просто extract_first() уже не в моде?)
источник

МС

Михаил Синегубов... in Scrapy
смотря что тебе надо.
мне как то надо было собрать из нескольких мест дескрипшен, так я Join делал :)
а так, там еще и replace_ХХХ есть
источник

МС

Михаил Синегубов... in Scrapy
кстати, вроде тут проскакивала информация, как сделать не блокирующий реквест в мидлваре.... на напомните?
источник

AR

Andrey Rahmatullin in Scrapy
Daniil Okhlopkov
Еще вопрос. Добавляя значения в Item через add_value или add_xpath, они все аппендятся и в результате получаются списки из одного элемента. Чтобы такого не было, нужно в описание класса Item везде написать output_processor=TakeFirst()?
default_output_processor=TakeFirst()
источник

AR

Andrey Rahmatullin in Scrapy
15821
А просто extract_first() уже не в моде?)
с процессорами оно не вяжется
источник

S

SoHard 🎄 in Scrapy
Михаил Синегубов
нашел какой то костыль, хз начсет рабочести
    def parse(self, response):
       nextreq = Request('http://en.wikipedia.org')
       dfd = defer.Deferred()
       reactor.callLater(DELAY, dfd.callback, nextreq)
       return dfd
тут
источник

AR

Andrey Rahmatullin in Scrapy
Михаил Синегубов
кстати, вроде тут проскакивала информация, как сделать не блокирующий реквест в мидлваре.... на напомните?
просто в шедулер кинуть или результата тут же дождаться?
источник

1

15821 in Scrapy
Andrey Rahmatullin
с процессорами оно не вяжется
Да, спасибо, уже читаю про это
источник

МС

Михаил Синегубов... in Scrapy
Andrey Rahmatullin
просто в шедулер кинуть или результата тут же дождаться?
и так и этак :), мне оба варианта надо :))
источник

AR

Andrey Rahmatullin in Scrapy
просто в шедулер кинуть - https://stackoverflow.com/a/38468666/3923463
источник

AR

Andrey Rahmatullin in Scrapy
на месте - treq c await
источник

МС

Михаил Синегубов... in Scrapy
ага, всем спс. Вроде понял направление
источник

DO

Daniil Okhlopkov in Scrapy
Andrey Rahmatullin
default_output_processor=TakeFirst()
Спасибо.
источник

DO

Daniil Okhlopkov in Scrapy
А есть какой-нибудь легкий способ сохранять логи (особенно ворнинги и error) скрапи в файл? А-то я сейчас запустил спайдер, логи летели так быстро, что самое интересное уже затерлось. Я знаю, что можно шаманить с logging, но вдруг есть что-нибудь приятное из коробки
источник

A

Andrii in Scrapy
Daniil Okhlopkov
А есть какой-нибудь легкий способ сохранять логи (особенно ворнинги и error) скрапи в файл? А-то я сейчас запустил спайдер, логи летели так быстро, что самое интересное уже затерлось. Я знаю, что можно шаманить с logging, но вдруг есть что-нибудь приятное из коробки
Есть в доках как писать в файл
источник