Size: a a a

2020 November 25

МС

Михаил Синегубов... in Scrapy
i
о, т.е. можно команду послать, чтобы все встало на время? прикольно
не послать, а принять. spider_idle это типа паук говроит "я нихера не делаю, но еще не успел начать уничтожаться"
источник

И

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

примерно так. У меня по такому алгоритму спокойно обработало, примерно, 20 млн постов в инсте.
Это очень сложное кун-фу для меня. Как реализовать запись блоками? Я думал пайп вызывается при каждом ввернутом итеме?
источник

И

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

МС

Михаил Синегубов... in Scrapy
Илья
Это очень сложное кун-фу для меня. Как реализовать запись блоками? Я думал пайп вызывается при каждом ввернутом итеме?
пишу по памяти, так что не пинаться
источник

i

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

И

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

И

Илья in Scrapy
Аля запустить, получить отчет
источник

i

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

МС

Михаил Синегубов... in Scrapy
 class MyPipe():
   data_items = []
   
   def process_item(self, item, spider):
       self.data_items.append(item)
       if len(self.data_items) > 10000:
           self.flush_data

   def flush_data(self):
       for item in self.data_items:
           # как то там сохраняем в базу
       self.data_items = []
источник

МС

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

И

Илья in Scrapy
process_item() must either: return an item object, return a Deferred or raise a DropItem exception.
источник

МС

Михаил Синегубов... in Scrapy
ну, сделай еще return item
источник

МС

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

И

Илья in Scrapy
Михаил Синегубов
писать, конечно, лучше через какой bulk_insert, но так нагляднее, ну и, с транзакциями обязательно играться. Не ради блокировки, а ради ускорения
Нету там пока проблем со скоростью, максимум 1000-1500 записей
источник

i

i in Scrapy
я люблю dataset либу использовать. там с транзакцией чтобы работать 3 строчки кода написать надо)
https://dataset.readthedocs.io/en/latest/
источник

i

i in Scrapy
эээээ
источник

И

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

i

i in Scrapy
т.е. ты все это городишь, чтобы 2000 записей записать?
источник

И

Илья in Scrapy
i
т.е. ты все это городишь, чтобы 2000 записей записать?
Чтобы научиться делать правильно.
источник

И

Илья in Scrapy
"правильно" наверно вот так даже
источник