Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3454 posts.

Центр помощи » Работа с циклом for i in range() » Янв. 25, 2023 08:25:50

Помогите решить задачу:
Попросить пользователя ввести 3 числа, вывести ответ да, если все числа положительные через цикл for i in range (3) или как то по другому. Но только не через условия

GUI » афигенный системTRAY » Янв. 23, 2023 19:50:20

сам долго искал
очень классный систем трэй
полезный для ботостроения

 import PySimpleGUIQt as sg  
def systemtraybar():
    menu_def = ['BLANK'
    , ['&Open'
    , '---'
    , '&Save'
    , ['1', '2', ['a', 'b', 'cnew']]
    ,'&Properties'
    , 'Bot join'
    , 'Bot exit'
    , 'E&xit programm']]  
    tray = sg.SystemTray(menu=menu_def, filename=r'images/icon0.ico')  
    while True:  # The event loop  
        menu_item = tray.Read()  
        print(menu_item)  
        if menu_item == 'Exit':  
            break  
        #---------------menu----------------#
        elif menu_item == 'Open':  
            sg.Popup('Menu item chosen', menu_item)
        elif menu_item == 'test':
            print('test pushed')
        #---------------menu----------------#
        #general click  
        #elif menu_item == '__ACTIVATED__':
        #    print('__ACTIVATED__!!!!!!!!')
site https://pypi.org/project/PySimpleGUIQt/0.19.0/

#keys system tray, systemtray, tray icon, system tray icon

Python для новичков » Загрузить файл на сервер по FTP » Янв. 21, 2023 17:50:48

Здравствуйте!
Подскажите как лучше загрузить файл на сервер по FTP.

Сейчас сначала скачиваю файл в локальный каталог
 from fs.copy import copy_fs
import wget
pict = 'https://luxe-host.ru/wp-content/uploads/f/f/7/ff73f244e19abdf561a4f8c9c7aa930e.png'
wget.download(pict, './Temp/')

Затем мне его нужно передать на сервер. Хочу с помощью библиотеки fs.

Локально это так:
 copy_fs('./Temp/', ('./123/'))

Подскажите, как можно передать файл на сервер,
Или если возможно, то можно сразу и на сервер скачать.

Спасибо!

Web » Правильная настройка Flask + Apache » Янв. 20, 2023 16:02:37

Всем привет!

Имею Flask проект на VPS-хостинге, Flask + Apache. Есть серверный скрипт wsgi, который активирует venv и перенаправляет запросы во Flask

Проблема в следующем: каждый запрос запускает Flask как будто по новой, снижая производительность приложения в целом (при создании аппа загружаются файлы для анализа)

Вопрос такой: как правильно настроить Flask + Apache так, чтобы при старте аппа подгрузить все свои данные, а дальше выдавать их в ответ на запросы не затрачивая на это время каждый раз?

Python для экспертов » Скрипт, который разбирает эту папку » Янв. 18, 2023 02:22:16

У многих на рабочем столе есть папка, которая называется как-то “Разобрать”. Как правило, разобрать эту папку руки никогда так и не доходят.

Мы с вами напишем скрипт, который разберет эту папку. В конце концов, вы сможете настроить эту программу под себя и она будет выполнять индивидуальный сценарий, отвечающий вашим потребностям. Для этого наше приложение будет проверять расширение файла (последние символы имени файла, как правило, после точки) и, в зависимости от расширения, принимать решения, к какой категории отнести этот файл.

Скрипт принимает один аргумент при запуске – это имя папки, в которой он будет производить сортировку. Допустим файл с программой называется sort.py, тогда, чтобы отсортировать папку /user/Desktop/Матлох, нужно запустить скрипт командой python sort.py /user/Desktop/Матлох

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

изображения ('JPEG', ‘PNG’, ‘JPG’, ‘SVG’);
видео файлы ('AVI', ‘MP4’, ‘MOV’, ‘MKV’);
документы ('DOC', ‘DOCX’, ‘TXT’, ‘PDF’, ‘XLSX’, ‘PPTX’);
музыка ('MP3', ‘OGG’, ‘WAV’, ‘AMR’);
архивы ('ZIP', ‘GZ’, ‘TAR’);
неизвестные расширения.
Вы можете расширить и дополнить этот список, если хотите.

В результатах работы должны быть:

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



файлы, расширение которых неизвестно, остаются без изменения.
 import os
main_path = r'C:\Users\prime\PycharmProjects\Мотлох'
# os.mkdir(main_path + '\\Мотлох')
extensions = {
    'video': ['mp4', 'mov', 'avi', 'mkv', 'wmv', '3gp', '3g2', 'mpg', 'mpeg', 'm4v',
              'h264', 'flv', 'rm', 'swf', 'vob'],
    'data': ['sql', 'sqlite', 'sqlite3', 'csv', 'dat', 'db', 'log', 'mdb', 'sav',
             'tar', 'xml'],
    'audio': ['mp3', 'wav', 'ogg', 'flac', 'aif', 'mid', 'midi', 'mpa', 'wma', 'wpl',
              'cda'],
    'images': ['jpg', 'png', 'bmp', 'ai', 'psd', 'ico', 'jpeg', 'ps', 'svg', 'tif',
              'tiff'],
    'archives': ['zip', 'rar', '7z', 'z', 'gz', 'rpm', 'arj', 'pkg', 'deb'],
    'documents': ['pdf', 'txt', 'doc', 'docx', 'rtf', 'tex', 'wpd', 'odt'],
    '3d': ['stl', 'obj', 'fbx', 'dae', '3ds', 'iges', 'step'],
    'presentation': ['pptx', 'ppt', 'pps', 'key', 'odp'],
    'spreadsheet': ['xlsx', 'xls', 'xlsm', 'ods'],
    'font': ['otf', 'ttf', 'fon', 'fnt'],
    'gif': ['gif'],
    'exe': ['exe'],
    'bat': ['bat'],
    'apk': ['apk']
}
def create_folders_from_list(folder_path, folder_names):
    for folder in folder_names:  
        if not os.path.exists(f'{folder_path}\\{folder}'):  
            os.mkdir(f'{folder_path}\\{folder}')  
def get_subfolder_paths(folder_path) -> list:  
    subfolder_paths = [f.path for f in os.scandir(folder_path) if f.is_dir()]
    return subfolder_paths
def get_subfolder_names(folder_path) -> list:  
    subfolder_paths = get_subfolder_paths(folder_path)
    subfolder_names = [f.split('\\')[-1] for f in subfolder_paths]
    return subfolder_names
def get_file_paths(folder_path) -> list:  
    file_paths = [f.path for f in os.scandir(folder_path) if not f.is_dir()]
    return file_paths
def get_file_names(folder_path) -> list:  
    file_paths = [f.path for f in os.scandir(folder_path) if not f.is_dir()]
    file_names = [f.split('\\')[-1] for f in file_paths]
    return file_names
def sort_files(folder_path):
    file_paths = get_file_paths(folder_path)
    ext_list = list(extensions.items())
    for file_path in file_paths:
        extension = file_path.split('.')[-1]
        file_name = file_path.split('\\')[-1]
        for dict_key_int in range(len(ext_list)):
            if extension in ext_list[dict_key_int][1]:
                print(f'Moving {file_name} in {ext_list[dict_key_int][0]} folder\n')
                os.rename(file_path, f'{main_path}\\{ext_list[dict_key_int][0]}\\{file_name}')
def remove_empty_folders(folder_path):
    subfolder_paths = get_subfolder_paths(folder_path)
    for p in subfolder_paths:
        if not os.listdir(p):
            print('Deleting empty folder:', p.split('\\')[-1], '\n')
            os.rmdir(p)
if __name__ == "main":
    create_folders_from_list(main_path, extensions)
    sort_files(main_path)


Нужна помощь! Посдкажите логику где тут сделать данную функцию и где указать ее обработку

все файлы и папки нужно переименовать, удалив из названия все символы, вызывающие проблемы. Для этого нужно применить к именам файлов функцию normalize. Следует понимать, что переименовать файлы следует так, чтобы не изменить расширения файлов.

Функция normalize:

Проводит транслитерацию кириллического алфавита на латинский.
Заменяет все символы, кроме латинских букв, цифр на ‘_’.
Требования к функции normalize:

принимает на вход строчку и возвращает строчку;
проводит транслитерацию кириллических символов на латиницу;
заменяет все символы, кроме букв латинского алфавита и цифр, символом ‘_’;
транслитерация может не соответствовать стандарту, но быть читабельной;
заглавные буквы остаются прописными, а маленькие — строчными после транслитерации.

Python для экспертов » Напишите функцию formatted_numbers » Янв. 16, 2023 20:58:32

Напишите функцию formatted_numbers, которая возвращает список отформатированных строк для вывода следующего кода:

for el in formatted_numbers():
print(el)

 def formatted_numbers():
    result = []
    header = "|{:^10}|{:^10}|{:^10}|".format('decimal', 'hex', 'binary')
    for i in range(16):
        s = f"|{i:<10d}|{i:^10x}|{i:>10b}|"
        result.append(s)
        print(s)
    return result

Выходила следующая таблица:

| decimal | hex | binary |
|0 | 0 | 0|
|1 | 1 | 1|
|2 | 2 | 10|
|3 | 3 | 11|
|4 | 4 | 100|
|5 | 5 | 101|
|6 | 6 | 110|
|7 | 7 | 111|
|8 | 8 | 1000|
|9 | 9 | 1001|
|10 | a | 1010|
|11 | b | 1011|
|12 | c | 1100|
|13 | d | 1101|
|14 | e | 1110|
|15 | f | 1111|
все столбцы имеют ширину 10 символов
у заголовков таблицы выравнивания по центру
первый столбец десятичных чисел – выравнивание по левому краю
второй столбец шестнадцатеричных чисел — выравнивание по центру
третий столбец двоичных чисел – выравнивание с правого края
вертикальный символ не входит в ширину столбца
Как вы уже поняли, функция formatted_numbers выводит таблицу чисел от 0 до 15 в десятичном, шестнадцатеричном и бинарном формате.

Все решил задачу)))отбой

Python для новичков » self loop » Янв. 15, 2023 02:26:20

есть дискорд бот (nextcord) который запускается
   bot.run(token)
сам run
 def run(self, *args: Any, **kwargs: Any) -> None:
        """A blocking call that abstracts away the event loop
        initialisation from you.
        If you want more control over the event loop then this
        function should not be used. Use :meth:`start` coroutine
        or :meth:`connect` + :meth:`login`.
        Roughly Equivalent to: ::
            try:
                loop.run_until_complete(start(*args, **kwargs))
            except KeyboardInterrupt:
                loop.run_until_complete(close())
                # cancel all tasks lingering
            finally:
                loop.close()
        .. warning::
            This function must be the last function to call due to the fact that it
            is blocking. That means that registration of events or anything being
            called after this function call will not execute until it returns.
        """
        loop = self.loop
        try:
            loop.add_signal_handler(signal.SIGINT, lambda: loop.stop())
            loop.add_signal_handler(signal.SIGTERM, lambda: loop.stop())
        except NotImplementedError:
            pass
        async def runner():
            try:
                await self.start(*args, **kwargs)
            finally:
                if not self.is_closed():
                    await self.close()
        def stop_loop_on_completion(f):
            loop.stop()
        future = asyncio.ensure_future(runner(), loop=loop)
        future.add_done_callback(stop_loop_on_completion)
        try:
            loop.run_forever()
        except KeyboardInterrupt:
            _log.info("Received signal to terminate bot and event loop.")
        finally:
            future.remove_done_callback(stop_loop_on_completion)
            _log.info("Cleaning up tasks.")
            _cleanup_loop(loop)
        if not future.cancelled():
            try:
                return future.result()
            except KeyboardInterrupt:
                # I am unsure why this gets raised here but suppress it anyway
                return None
при запуске бота он блокирует остальные процессы и это описано в описании к функции ран
вопрос что тут нужно поменять что бы он не блокировал остальные процессы

Django » 404 на ubuntu 22 » Янв. 15, 2023 02:20:13

Абсолютно глупая проблема. Есть проект написанный на django 3.2 , pyenv . Он рабочий, он блин запускался с нуля ни раз и на разных конфигах. Разными людьми. Т.е. как бы все хорошо.

Но. Взят новый сервер на Ubuntu 22, процессор xeon. OVH. pyenv не может ничего установить жалуясь на несоответствие хешей. Ок, ставим все обходным путем, зависимости сохранены.

Но при обращении к админке получаю “Django 404 Error page not found…the current path matched the last one”. Т.е. джанга находит путь, но все равно выдает 404. WTF ?

Установка 4.1 проблему решает. Но - какого фига, то что работает на 99% разных конфигах, режется на текущем.

Т.е. я понимаю, если бы был ARM, но нет, тот же интел. Это что, какие то внутренние regexp либы операционки так могут влиять ?

Я не привожу конфиги и т.п., все рабочее, тут читать выше. Просто не могу понять, почему на отдельно взятом сервере все те же действия не работают.

Python для новичков » GeoLocation » Янв. 9, 2023 20:14:46

Добрый день, всем!
Нашел программку на GitHube, решил поюзать её.
Установил Селен, нашел нужный chromedriver, что то пошло не так.(((
Скриншот прикрепляю. Подскажите, что не так?
 from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
import time
def getLocation():
    options = Options()
    options.add_argument("--use-fake-ui-for-media-stream")
    timeout = 20
    driver = webdriver.Chrome(executable_path = './chromedriver.exe', chrome_options=options)
    driver.get("https://mycurrentlocation.net/")
    wait = WebDriverWait(driver, timeout)
    time.sleep(3)
    longitude = webdriver.find_elements_by_id('//*[@id="longitude"]')
    longitude = [x.text for x in longitude]
    longitude = str(longitude[0])
    latitude = driver.find_elements_by_xpath('//*[@id="latitude"]')
    latitude = [x.text for x in latitude]
    latitude = str(latitude[0])
    driver.quit()
    return #(latitude,longitude)
print(getLocation())

Центр помощи » Как работает система if,elif » Янв. 8, 2023 20:05:22

У меня задание написать понедельник=1, вторник=2,среда=3 и тд
И когда они дойдут до 8-и то должно писать ошыбка
Спасибо
З уважением Артем

Django » Вывод формы из БД » Янв. 7, 2023 11:08:18

Всем доброго дня!

Форма из БД не ни как не хочет высвечиваться в html-шаблоне. Вроде все правильно делаю:

Файл forms.py:

 class CommentForm(ModelForm):
    class Meta:
        model = Comments
        fields = ['kom_name', 'text']
 
        widgets = {
            "kom_name": TextInput(attrs={
                'class': 'form-control',
                'placeholder': 'Ваше Имя'
            }),
            "text": Textarea(attrs={
                'class': 'form-control',
                'placeholder': 'Комментарий'
            })
 
        }

Файл models.py:

 class Comments(models.Model):
    numbers = models.CharField('Ид новости', max_length=40, default='')
    kom_name = models.CharField('Имя комментатора', max_length=40, default='')
    text = models.TextField('Текст коммента', max_length=200)
 
    def __str__(self):
        return self.kom_name


Файл views.py:

 def add_comm(request):
 
    if request.method == 'POST':
        comm = CommentForm(request.POST)
        if comm.is_valid():
            comm.save()
            return redirect('news-detail')
 
    formaa = CommentForm()
 
    cont = {'comment': formaa}
 
    return render(request, 'news/detail_view.html', cont)

Шаблон:

  <form method="post">
                        {% csrf_token %}
                        {{ comment.kom_name }}<br>
                        {{ comment.text }}<br>
                    <button class="btn btn-success" type="submit">Добавить коммент</button>
                    </form>
 
                    </p>

Прошу вашей помощи.

Django » Сериализатор для POST запроса » Янв. 2, 2023 13:08:48

Привет, в общем на Джанго проект, надо по АПИ передать POST запрос на добавлении нового рецепта. Да-да рецепта
В целом есть model.Recipe, с атрибутом ingredients
 ingredients = models.ManyToManyField(Ingredient,
                                         through='IngredientInRecipe')

Именно через through так как нужно доп поле “amount”
Релационная таблица model.IngredientInRecipe содержит 3 поля

 recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    ingredient = models.ForeignKey(Ingredient, on_delete=models.SET_NULL, null=True)
    amount = models.DecimalField(max_digits=6,
                                 decimal_places=1,
                                 validators=[MinValueValidator(1)]
                                 )

Теперь в своем сериализаторе RecipeSerializer есть
 ingredients = IngredientInRecipeSerializer(many=True)
Далее - уходим в другой сериализатор IngredientInRecipeSerializer и так указываю (или точнее хочу указывать) чтобы в моей релационной таблице искался или создавалась запись

 class IngredientInRecipeSerializer(serializers.ModelSerializer):
    """Serializer for ingredient in recipe objects"""
    
    ingredient = serializers.PrimaryKeyRelatedField(
        queryset=Ingredient.objects.all()
    )
    amount = serializers.DecimalField(max_digits=6,
                                      decimal_places=1)
    
    def create(self, validated_data):
        ingredient = validated_data.pop('ingredient')
        amount = validated_data.pop('amount')
        ingredient_in_recipe = IngredientInRecipe.objects.create(ingredient=ingredient,
                                          amount=amount)
        return ingredient_in_recipe

Теперь отправляю из PM запрос POST такого содержания
"ingredients": [
{
"id": 1,
"amount": 10
},
{
"id": 2,
"amount": 20
}
],

но в ответ получаю

{
"ingredients": [
{
"ingredient": [
"This field is required."
]
},
{
"ingredient": [
"This field is required."
]
}
]
}

Я так понимаю что-то не так с моим сериализатором атрибута ingredient в IngredientInRecipeSerializer..

Центр помощи » Парсер сайта Whoscored ? » Дек. 25, 2022 23:29:25

Добрый вечер! Помогите спарсить данные ( Phyton) с данного сайта Your text to link here… нужно всего два столбца игрок и рейтинг. Подскажите пожалуйста ?

Центр помощи » robot » Дек. 25, 2022 17:39:43

Доброго времени суток, первые дни изучаю Питон. Хотел написать помощника в Роблоксе, который нажимает на кнопку газа. (w или up) перепробовал все способы библиотеки pyautogui, в блокнот пишет все нормально, а вот в среде не шевелится. Клик мышки активирует нужное мне окно. Подскажите куда копать?
 import pyautogui 
import time
pyautogui.click(x=1095, y=568)
time.sleep(1)
i=0
while i<25:
    pyautogui.press('up')
    time.sleep(0.2)
   #   pyautogui.keyUp('w')
    i=i+1
pyautogui.keyDown('e')

Python для новичков » while внутри def? » Дек. 22, 2022 00:26:47

Такой код:
 import random
import subprocess
from threading import Thread
results = []
start_processes = 6
def run_command(count, result_storage):
    cmd = str(subprocess.check_output(['ping', '-c', f'{body}', 'google.' + 'com'], text=True))
    result_storage.append(cmd)
threads = []
for _ in range(start_processes):
    ch = random.choices('1234567890', k=2)
    body = (''.join(ch))
    print(body)
    t = Thread(target=run_command, args=[body, results])
    t.start()
    threads.append(t)
for t in threads:
    t.join()
Запускает 6 процессов ping, прерывающихся в разное время.
После прерывания одного из процессов необходимо запускать новый чтобы всегда было шесть одновременно функционирующих процессов ping.

Python для новичков » Как скопировать текст буфера обмена » Дек. 15, 2022 18:23:10

мне нужно что бы содержимое файла config.txt копировалось в буфер обмена, что бы вставить его через pyautogui

подскажите как это можно реализовать

это не весь код, а его часть, я пишу прогу которая закидывает видосы на ютуб в большом количестве, пользователь выбирает директорию, она сохраняется в файле конфиг. далее вызывается скрипт, в котором открывается ютуб, открывается “добавить видео” и там вылазит штука выбрать папку, мне нужно что бы pyautogui нажимал ctrl + v что бы вставить текст из конфига. но я не понимаю как засунуть текст из config.txt в буфер обмена.


def cho_dir():
directory = fd.askdirectory(title=“Выбрать папку с видео”)
if directory:
print(directory)
with open(“Config.txt”, “w”) as file:
file.write(str(directory))
def loaddir():
with open(“Config.txt”, “r”) as file:
config = file.read ()
print(config)



Python для новичков » Задача "Электронные часы" » Дек. 14, 2022 15:50:36

Добрый Вечер! Подскажите как решить следующую задачу.
“Сегодня в NN часов MM минут хозяин магазина заказал доставку нового товара. Оператор сказал, что продукты доставят через TT минут.
Сколько будет времени на электронных часах, когда привезут долгожданные продукты?”
написал такое решение:
 N = int(input()) # hours
M = int(input()) # minute
T = int(input()) # dostavka min
hours = T % (60 * 24) // 60
minutes = T % 60
print(f'{((hours + N) + (minutes + M) // 60) % 24}:{(minutes + M) % 60}'
Необходимо добавить нули перед значением часа и минуты при этом сохранить правильное форматирование, чтобы не получалось к примеру : 015 часов и 023 минуты. Подскажите что еще добавить ?)
PS: Немного изменил вывод, теперь ответ получается как положено. но система его не принимает.
 N = int(input())
M = int(input()) 
T = int(input()) 
hours = (T % (60 * 24) // 60)
minutes = (T % 60)
thours = (((hours + N) + (minutes + M) // 60) % 24)
tminutes = ((minutes + M) % 60)
print(f'{thours:02}:{tminutes:02}')
PS:Все, разобрался, задача решена верно))

Python для новичков » время нажатия кнопки » Дек. 14, 2022 13:26:06

Нужно получить время в секундах пока кнопка нажата. Кнопка создана “с залипанием”, то есть, пользователь нажал на кнопку - кнопка “залипла”, нажал второй раз - кнопка “отлипла”. Нужно получить время в секундах между этими событиями, а также время в секундах между первым нажатием и включением программы.

 import time
import pandas as pd
from PyQt5 import uic, QtCore, QtGui, QtWidgets, QtTest
qtime = time.time()
#Параметры кноки:
        self.bt = QtWidgets.QPushButton(self.centralwidget) 
        self.bt.setGeometry(QtCore.QRect(110, 40, 180, 70))
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(False)
        font.setWeight(50)
        self.bt.setFont(font)
        self.bt.setAutoFillBackground(False)
        self.bt.setStyleSheet("background-color: qlineargradient(spread:repeat, x1:1, y1:1, x2:1, y2:0, stop:0 rgba(149, 149, 149, 255), stop:0.142045 rgba(220, 220, 220, 255));\n"
"")
        self.bt.setCheckable(True)
        self.bt.setObjectName("bt")
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
Задумка такая: я получаю в переменной qtime время в секундах от начала эпохи до открытия программы. Далее по первому нажатию на кнопку bt нужно записать в переменную (допустим bt_1time) текущее время в секундах от начала эпохи, вычесть qtime из bt_1time и получить время в секундах между открытием программы и первым нажатием. Таким-же методом получить время второго нажатия на кнопу (отлипания).
Пробовал через self.bt.pressed.connect() но ничего не вышло

Python для новичков » Помогите обойти CloudFlare  » Дек. 13, 2022 21:23:26

Всем доброго дня.
Есть парсер под несколько сайтов, недавно на один из сайтов поставили защиту CloudFlare. Пытался обойти с помощью cloudscraper, но получаю ошибку: “Detected a Cloudflare version 2 challenge, This feature is not available in the opensource (free) version.” Далее попытался обойти через httpx, но снова ошибка:
“Возникло исключение: JSONDecodeError
Expecting value: line 1 column 1 (char 0)
StopIteration: 0
During handling of the above exception, another exception occurred:

File ”C:\Users\Public\Parser\Parser.py“, line 45, in <module>
ab = geturl.json()
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)”

Сам url является ссылкой на json-объект.
Можете помочь разобраться с этим? Если информации недостаточно - спрашивайте, отвечу.

Сам код:
 import json
import requests
import random
import httpx
with open('base1.json', encoding = 'UTF-8') as file:
    base_fl = json.load(file)
with open('base2.json', encoding = 'UTF-8') as file:
    base_bs = json.load(file)
url = 'https://url...'
userag = ["Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36",
          "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.56"]
randomusag = random.choice(userag)
headers = {'User-Agent':randomusag}
client = httpx.Client(http2=True)
geturl = client.get(url, headers=headers)
ab = geturl.json()