Как создавать новую базу данных коллекции после каждого выполнения скраппинга?

Я создал инструмент для сбора данных с сайта aliexpress с помощью python и selenium. Вот мой скрипт на python :

Пояснение :

Мой код получает все данные с сайта aliexpress и хранит их в коллекции базы данных Mongodb, чтобы отобразить их в формате datatable с помощью django. Проблема, над которой я бьюсь, заключается в том, что когда я выполняю свой код в первый раз, все идет правильно. Но когда я выполняю его во второй раз, я получаю данные в той же коллекции вместо того, чтобы создать новую коллекцию и новую таблицу данных. Другими словами, я хочу, чтобы при каждом выполнении кода создавалась новая коллекция и новая таблица данных.

Мое датируемое представление :

def datatable_view(request):
    if request.method =='POST':
        form = Scraping(request.POST)
        if form.is_valid():
            subject=form.cleaned_data['subject']
            scrap(subject)
    client = pymongo.MongoClient("mongodb://localhost:27017/")
    db= client["db2"]
    col = db["aliex2"]
    products = col.find()
    context = {'products' : products}
    return render(request,'datatable.html', context)

ps : subject - это название продукта, которое пользователь введет перед скраппингом.

Я буду очень благодарен, если вы мне поможете. Заранее спасибо!

Вы всегда сохраняете дату в коллекции под названием aliex2, поэтому она хранится в той же коллекции. Если вы хотите хранить в новой коллекции, каждый раз, когда вы соскабливаете новые данные, убедитесь, что вы используете уникальное имя коллекции вместо aliex2

MongoDB создает новые базы данных и коллекции, как только вы пытаетесь сослаться на них. Таким образом, изменив ссылку на базу данных и/или коллекцию в конце выполнения скраппинга, вы можете записывать в новую базу данных/коллекцию. Чтобы создать новую коллекцию для каждой темы, вы можете изменить ссылку на базу данных в методе scrap на что-то вроде:

client = MongoClient("mongodb://localhost:27017/")    

# use variable db and collection names
collection_name = subject
collection = client["db2"][collection_name]     

data = df.to_dict(orient = 'records')     
collection.insert_many(data)

Чтобы использовать ссылку на переменную в datatable_view, вам придется использовать subject из POST-запроса. Использование следующего фрагмента может затормозить запрос, но позволит вам динамически считывать полученную тему:

def datatable_view(request):
    if request.method =='POST':
        form = Scraping(request.POST)
        if form.is_valid():
            subject=form.cleaned_data['subject']
            scrap(subject)
        
            client = pymongo.MongoClient("mongodb://localhost:27017/")
            # use variable names for db and collection reference
            db= client["db2"]
            col = db[subject]
            products = col.find()
            context = {'products' : products}
            return render(request,'datatable.html', context)
    return

Наблюдая за вашей проблемой, я получил идею, возможно, она поможет вам:

Я поместил базу данных на четыре строки вне цикла page_nb, так что то, что он будет делать, это строки всей страницы будут добавлены в список результатов и, наконец, список результатов будет добавлен в dataframe и в базу данных.

представление с данными и HTML с данными останутся прежними

Попробуйте эту простую идею для решения вашей проблемы.

Вернуться на верх