Загрузка данных


import csv
import urllib.request
import urllib.parse
import os
import re
import time

# --- НАСТРОЙКИ ---
CSV_FILE = 'docs.csv' 
DOWNLOAD_DIR = './downloads'
# Вставьте куки из DevTools (те, что на скриншоте)
COOKIE = "_ym_d=1776411917; _ym_uid=1776411917886570665; WSS_FullScreenMode=false"

# Базовая ссылка со скриншота
BASE_URL = "https://main.atb.su/normdocs/Lists/Docs/ByCategory.aspx"
BASE_DOMAIN = "https://main.atb.su"

os.makedirs(DOWNLOAD_DIR, exist_ok=True)

opener = urllib.request.build_opener()
opener.addheaders = [
    ('Cookie', COOKIE),
    ('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36')
]
urllib.request.install_opener(opener)

def clean_html(text):
    return re.sub(r'<[^>]+>', '', text).strip()

def run():
    # Читаем CSV с разделителем ';' (точка с запятой)
    with open(CSV_FILE, mode='r', encoding='utf-8-sig') as f:
        reader = csv.DictReader(f, delimiter=';') 
        
        for row in reader:
            title = row.get('Название', '').strip()
            category = row.get('Категория', '').strip()
            
            if not title:
                continue
                
            print(f"\nПоиск: {title[:50]}... Категория: {category}")
            
            # Фильтруем сразу по Названию (Title) и Категории (DocCategory)
            params = {
                'FilterField1': 'Title',
                'FilterValue1': title,
                'FilterField2': 'DocCategory', 
                'FilterValue2': category
            }
            query = urllib.parse.urlencode(params)
            search_url = f"{BASE_URL}?{query}"
            
            try:
                with urllib.request.urlopen(search_url) as resp:
                    html = resp.read().decode('utf-8')
                
                # Ищем строку в таблице (ms-itmhover)
                rows = re.findall(r'<tr[^>]*class="[^"]*ms-itmhover[^"]*"[^>]*>(.*?)</tr>', html, re.S | re.I)
                
                if not rows:
                    print("  [-] Не найдено. Проверьте название или категорию в CSV.")
                    continue

                for row_html in rows:
                    row_text = clean_html(row_html)
                    
                    # Проверяем статус "Действителен" как на скриншотах
                    if "Действителен" not in row_text:
                        print("  [!] Пропуск (статус не 'Действителен').")
                        continue
                    
                    # Ищем ссылку на вложение (на скриншоте это href="Attachments/...")
                    link_match = re.search(r'href="([^"]*?Attachments/[^"]+)"', row_html, re.I)
                    if link_match:
                        file_url = urllib.parse.urljoin(BASE_DOMAIN, link_match.group(1))
                        file_name = urllib.parse.unquote(file_url.split('/')[-1])
                        
                        print(f"  [+] Найдено! Скачиваю: {file_name}")
                        
                        with urllib.request.urlopen(file_url) as f_resp, open(os.path.join(DOWNLOAD_DIR, file_name), 'wb') as out:
                            out.write(f_resp.read())
                        
                        time.sleep(1) # Пауза для стабильности
                        break
                        
            except Exception as e:
                print(f"  [!] Ошибка: {e}")

if __name__ == "__main__":
    run()
    print("\nЗавершено!")