Задать вопрос
@Bombalelo

Python requests как правильно написать алгоритм?

код в который нужно вставить алгоритм обработки
import requests  
import pandas as pd  


headers = {  
    'accept': 'application/json, text/plain, */*',  
    'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',  
    'authorization': 'Bearer токен',  
    'content-type': 'application/json',  
    'origin': 'сайт',  
    'priority': 'u=1, i',  
    'referer': 'https://операционная вкладка',  
    'sec-ch-ua': '"Chromium";v="134", "Not:A-Brand";v="24", "Google Chrome";v="134"',  
    'sec-ch-ua-mobile': '?0',  
    'sec-ch-ua-platform': '"Windows"',  
    'sec-fetch-dest': 'empty',  
    'sec-fetch-mode': 'cors',  
    'sec-fetch-site': 'same-origin',  
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',  
    'x-wbwh-language': 'ru',  
    'x-wh-egeo': 'Bearer токен  # Замените на ваш токен  
}  


shk_ids = [
130 , 501, 384,  ]    


results = []  

 
for shk_id in shk_ids:  
    json_data = {  
        'shk_id': shk_id,  
    }  

    try:  
        response = requests.post(  
            'https://сайт операции',  
            headers=headers,  
            json=json_data,  
            timeout=10  
        )  

   
        if response.status_code == 200:  
            result_data = response.json()  

             
            print(f"Результат для shk_id {shk_id}: {result_data}")  

            
            if isinstance(result_data, list):  
            
                for item in result_data:  
                    
                    item['id'] = shk_id  
                    results.append(item)  
            elif isinstance(result_data, dict):  
          
                result_data['id'] = shk_id  
                results.append(result_data)  
            else:  
                print(f"Непредвиденная структура ответа для shk_id {shk_id}: {result_data}")  

            print(f"Ответ на shk_id {shk_id} получен.")  
        else:  
            print(f"Ошибка запроса для shk_id {shk_id}: {response.status_code}, {response.text}")  

    except requests.exceptions.RequestException as e:  
        print(f"Произошла ошибка для shk_id {shk_id}: {e}")  


if results:  

    df = pd.DataFrame(results)  

    
    df = df[['dt', 'state_id', 'state_descr', 'place_cod', 'place_name_',   
             'place_name', 'wh_id', 'office_id', 'box_id',   
             'container_id', 'tare_type', 'state_employee_id',   
             'state_employee_name', 'nuller', 'tare_id',   
             'sticker_id', 'goods_sticker_type', 'correction_dt']]  


    output_file = 'shk_history_results.xlsx'  
    df.to_excel(output_file, index=False, engine='openpyxl')  

    print(f"Данные сохранены в файл: {output_file}")  
else:  
    print("Не удалось получить данные для сохранения.")


вот пример рабочего алгоритма , проблема в том что там парсинг происходит через силениум, js и получение таблицы. это долго и в будущем хочу все это перенести в тг бота где работа с силениумом под вопросом .
# Получаем тело таблицы и весь её текст через JavaScript
        table_body = driver.find_element(By.CSS_SELECTOR, "table.mat-mdc-table tbody")
        table_text = driver.execute_script("return arguments[0].innerText;", table_body)
        
        # Если обнаружен признак "Сортировка брака - нет дефекта", сразу присваиваем результат
        if "Сортировка брака - нет дефекта" in table_text:
            shk_value = "брак не с нашего города"
        # Если фразы "ОбработкаБрака Б4" нет — то тоже сразу выходим
        elif "ТБ4" not in table_text:
            shk_value = "брак не с нашего города"
        else:
            # Если фраза найдена, то получаем список строк таблицы для детального анализа
            rows = driver.find_elements(By.CSS_SELECTOR, "table.mat-mdc-table tbody tr")
            # Перебираем строки с конца (порядок событий важен)
            row_texts = [row.text for row in reversed(rows)]
            
            spusk_indices = []
            obrabotka_indices = []
            
            for idx_row, text in enumerate(row_texts):
                if ("Спуск с хранения Б3" in text) or ("Собран на потоковой сборке" in text):
                    spusk_indices.append(idx_row)
                if "ОбработкаБрака Б4" in text:
                    obrabotka_indices.append(idx_row)
            
            found = False
            for sp in spusk_indices:
                for ob in obrabotka_indices:
                    if ob < sp and (sp - ob) <= 10:
                        found = True
                        break
                if found:
                    break
            
            if found:
                shk_value = "брак с нашего хранения"
            else:
                shk_value = "брак выявлен у нас"
        
        data.append([shk, shk_value])
        print(f"ШК {shk} обработан: {shk_value}")

Сколько не пытался адаптировать этот алгоритм , не получается.
  • Вопрос задан
  • 219 просмотров
Подписаться 2 Простой 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы