Size: a a a

2020 November 25

И

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

К

Кирилл in Scrapy
Так и и делай
источник

МС

Михаил Синегубов... in Scrapy
хм, а нельзя порубить на два паука. Один собирает основные данные, второй - если надо, дособираешь детали... 🧐
источник

AR

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

i

i in Scrapy
ну у меня примерно так реализовано в одном месте, там конечно база плачет, что "вы меня со всех сторон вызываете, айайай так нельзя вообще-то", но работает. А работает, не трогаю)
источник

МС

Михаил Синегубов... in Scrapy
и не надо будет базу кошмарить по каждому чиху
источник

i

i in Scrapy
Михаил Синегубов
хм, а нельзя порубить на два паука. Один собирает основные данные, второй - если надо, дособираешь детали... 🧐
а смысл? это все-равно не решит проблемы плача синхронного доступа к базе. Ну если только для облегчения архитектуры в духе map-filter-reduce
источник

МС

Михаил Синегубов... in Scrapy
i
а смысл? это все-равно не решит проблемы плача синхронного доступа к базе. Ну если только для облегчения архитектуры в духе map-filter-reduce
смысл в том, что ты блоками можешь писать. У меня похожее по 10 тыс записей туда/сюда дергает
источник

МС

Михаил Синегубов... in Scrapy
а не по одной записи насиловать двиг
источник

i

i in Scrapy
хммм, ну я как-то пробовал так сделать, но у меня не взлетело. база там взмолилась типа ты офигел в меня писать тут в одном месте транзакцию открыл, в другом закрыл. а как ты при этом транзакцию пишешь?
источник

МС

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

И

Илья in Scrapy
Михаил Синегубов
смысл в том, что ты блоками можешь писать. У меня похожее по 10 тыс записей туда/сюда дергает
Можно посмотреть ?
источник

i

i in Scrapy
ну можно типа вне класса просто if'ом делать проверку что набралось 10000 элементов, по-идее
источник

i

i in Scrapy
и потом если набралось открываешь транзакцию и пишешь
источник

i

i in Scrapy
просто там же по-факту может быть кол-во пауков умноженное на конкарренси - и когда я такое попробовал, видать ударился в две одновременно открытые транзакции и все сдохло. ну и подзабил с мыслью  - "работает, не трогай"
источник

i

i in Scrapy
или в классе методом класса, аля статическим методом
источник

i

i in Scrapy
и еще стоп-сигнал на то, что другой кто-то открыл транзакцию тогда надо делать. хотя бы на файликах)
источник

МС

Михаил Синегубов... in Scrapy
нельзя, это искать надо. Там суть такая была (в одном пауке)
1. в базе таблица со ссылками. Это типа очередь со статусами и с признаком, в какой колбек отправлять ссылку.
2. при старте и по событию spider_idle смотришь в базу, если там есть ссылки, которые надо обработать - обрабатываешь.
3. в базу пишешь в пайпе блоками (у меня было примерно 10 тыс)

примерно так. У меня по такому алгоритму спокойно обработало, примерно, 20 млн постов в инсте.
источник

i

i in Scrapy
о, т.е. можно команду послать, чтобы все встало на время? прикольно
источник

i

i in Scrapy
еще могу совет дать - лучше юзай постгресс, потом легче будет)
источник