В моем проекте Scrapy, связанном с Django, я перебираю страницы с предложениями для рынков жилья и сохраняю в базе данных. В файле конвейеров я создаю уникальный hash_id для каждого элемента и сохраняю другие данные в БД. Каждый раз, когда я хочу обновить базу данных для новых предложений (это работает), а также для закрытых предложений (больше не отображается на странице), меняйте статус в базе данных на «неактивно». Как это сделать, когда process_item работает только для указанного элемента c. Моя идея состояла в том, чтобы собрать все hash_id из db в списке, проверить списанные элементы, если их hash_id присутствуют. Если да, удалите hash_id из списка. Затем обновите статус оставшихся предметов. Но это не работает.
Файл моего конвейера:
def hashed_list():
hashed_items_db = Offert.objects.filter(still_active = True)
hashed_list=[item.hash_id for item in hashed_items_db]
return hashed_list
class ScraperPipeline(object):
hashed_list = hashed_list()
def create_hash(self, *args):
...
return data
def process_item(self, item, spider):
.....
hash_id = self.create_hash(args)
item['hash_id'] = hash_id
if hash_id not in hashed_list:
item.save()
else:
hashed_list.remove(hash_id)
return item
def close_spider(self, spider):
for hash_item in hashed_list:
obj =Offert.objects.get(hash_id=hash_item)
obj.still_active = False
obj.end_date = timezone.now() - timedelta(days=1)
obj.save()
return hashed_list
Как это сделать? Есть ли какой-нибудь простой (??) способ обновить не удаленные элементы в БД?