Size: a a a

2020 November 25

AR

Andrey Rahmatullin in Scrapy
лол, опять это "уже"
источник

AR

Andrey Rahmatullin in Scrapy
ты декодировать не можешь потому что ты картинку скачал или что-то такое
источник

AR

Andrey Rahmatullin in Scrapy
потому и респонс у тебя не htmlresponse
источник

KM

Konstantin Maiorov in Scrapy
Ясности мне это никакой не придало. Обрабатывать то где?
источник

AR

Andrey Rahmatullin in Scrapy
обрабатывать нетекстовый респонс как текстовый? нигде.
источник

AR

Andrey Rahmatullin in Scrapy
по ТЗ ты его и кэшировать не сможешь
источник

KM

Konstantin Maiorov in Scrapy
Кароче только если чтот внешнее писать совсем уже, выходит, обрезающее в колбеке спайдера и сохраняющее как-то аналогичным образом
источник

AR

Andrey Rahmatullin in Scrapy
ну если так тебе будет проще то да
источник

KM

Konstantin Maiorov in Scrapy
Спасибо за ответы.
Может кто-то тут сталкивался с подобной задачей или знает как решить по-другому?
источник

МС

Михаил Синегубов... in Scrapy
Konstantin Maiorov
Спасибо за ответы.
Может кто-то тут сталкивался с подобной задачей или знает как решить по-другому?
https://github.com/xiaowangwindow/scrapy-httpcache

поройся по сырцам, они вроде кэш в тексте хранят. Может натолкнет на мысли какие
источник

KM

Konstantin Maiorov in Scrapy
Михаил Синегубов
https://github.com/xiaowangwindow/scrapy-httpcache

поройся по сырцам, они вроде кэш в тексте хранят. Может натолкнет на мысли какие
Спасибо, поразбираюсь вечером
источник

И

Илья in Scrapy
Как правильнее реализовать с точки зрения архитектуры? У меня есть две функции parse
def parse(self, response):
.....
   yield scrapy.Request(details_link, callback=self.details,  cb_kwargs=dict(item=item.copy()))
def details(self, response, item):
yield item
Мне нужно минимизировать число обращений к сайту. Чтобы если объект есть в Mysql базе и он не изменился(это можно понять в первой функции parse), то итем дропается. Если изменился то проваливается глубже и возвращает весь итем. Причем если изменилась только цена, то первой функции тоже вполне достаточно, чтобы обновить объект в базе. У меня настроен pipeline на сохранение в базу. Как то можно ему дополнительные параметры передать, чтобы в зависимости от них обновить объект частично, полностью, создать новый или ничего не делать?
источник

И

Илья in Scrapy
Как обновить объект полностью и создать новый это я разобрался, можно не выходя из pipeline. А вот как остановить паука на середине и не дать провалиться, вот это я разобраться не могу.
источник

AR

Andrey Rahmatullin in Scrapy
нет, логику придётся совать в коллбэк, потому что пайплайны получают уже итемы, а у тебя логика должна разные итемы отдавать
источник

AR

Andrey Rahmatullin in Scrapy
ну либо написать страшную логику на мидлварях, которая получает итем, смотрит в базу, и генерит реквест если надо, вроде так можно
источник

AR

Andrey Rahmatullin in Scrapy
ну и тормозить будет конечно, если синхронно в базу ходить
источник

И

Илья in Scrapy
А если передавать в качестве поля итема параметр?
источник

AR

Andrey Rahmatullin in Scrapy
не понимаю о чём речь, но как это поможет с тем что реквест то ли надо делать, то ли не надо?
источник

И

Илья in Scrapy
В первой функции сделать запрос к базе, проверить изменились ли поля. добавить в итем параметр. Если нужно провалиться глубже, если нет, то yield item
источник

i

i in Scrapy
может попробовать просто чекать именно в parse на наличие в базе. если есть, не проваливаешься вглубь, если нет - проваливаешься. делаешь это if'ом. Вангую тормоза будут в пределе на 20-50%. Вопрос только про то, что могут возникать нехорошие штуки с базой при одновременной записи. По-идее если ты будешь именно внутри parse открывать и закрывать транзакцию, то взлетит. Ну так костыльненько конечно.
источник