Перейти до вмісту
    ШІ / АВТОМАТИЗАЦІЯ ЗБОРУ ДАНИХ ТА ВІДПРАВКИ ЗВІТІВ ЧЕРЕЗ API: ПОВНИЙ ГІД

    АВТОМАТИЗАЦІЯ ЗБОРУ ДАНИХ ТА ВІДПРАВКИ ЗВІТІВ ЧЕРЕЗ API: ПОВНИЙ ГІД

    Оцініть цю публікацію!
    [Усього: 0 Середнє значення: 0]

    У сучасному світі, де дані стають все більш важливими, автоматизація збору та обробки інформації з різних джерел – критично важлива задача. Ручний збір даних, особливо з веб-сайтів, займає багато часу, схильний до помилок та не масштабується. Використання API часто є найкращим рішенням, але іноді потрібно “підтягнути” дані з веб-сторінок, які не надають API. Ця стаття покаже, як поєднати парсинг веб-сторінок, автоматизацію API, інтеграцію n8n для оркестрування процесів та обробку великих JSON структур, щоб створити надійну систему збору та звітності.

    Практична реалізація та приклад коду

    Ось як виглядає правильне рішення:

    
    # Залежності:
    # pip install beautifulsoup4 selenium requests n8n-workflows
    
    from bs4 import BeautifulSoup
    import requests
    from selenium import webdriver
    import json
    import n8n_api
    
    # 1. Парсинг веб-сторінки (BeautifulSoup + Selenium для динамічного контенту)
    def scrape_website(url):
        try:
            # Спроба отримати HTML звичайним способом
            response = requests.get(url)
            response.raise_for_status()  # Перевірка на помилки HTTP
            soup = BeautifulSoup(response.content, 'html.parser')
        except requests.exceptions.RequestException:
            # Якщо звичайний спосіб не працює (динамічний контент), використовуємо Selenium
            driver = webdriver.Chrome()  # Переконайтеся, що у вас встановлено ChromeDriver
            driver.get(url)
            soup = BeautifulSoup(driver.page_source, 'html.parser')
            driver.quit()
        return soup
    
    # 2. Витяг даних з HTML (приклад - витягування назв продуктів та цін)
    def extract_data(soup):
        products = []
        for item in soup.find_all('div', class_='product'):  # Замініть на відповідний CSS селектор
            try:
                name = item.find('h2', class_='product-name').text.strip()
                price = float(item.find('span', class_='price').text.strip().replace('$', ''))
                products.append({'name': name, 'price': price})
            except AttributeError:
                print(f"Помилка при витягуванні даних з елемента: {item}")
        return products
    
    # 3. Автоматизація API (відправка даних на сервер)
    def send_data_to_api(data, api_endpoint):
        headers = {'Content-Type': 'application/json'}
        try:
            response = requests.post(api_endpoint, json=data, headers=headers)
            response.raise_for_status()
            print(f"Дані успішно відправлені на API: {api_endpoint}")
            return response.json()
        except requests.exceptions.RequestException as e:
            print(f"Помилка при відправці даних на API: {e}")
            return None
    
    # 4. Інтеграція n8n (запуск workflow для обробки та подальшої дії)
    def trigger_n8n_workflow(data, workflow_id, api_key):
        n8n = n8n_api.N8N(api_key)
        n8n.trigger_workflow(workflow_id, data)
        print(f"Workflow {workflow_id} запущено з даними: {data}")
    
    # 5. Обробка великих JSON структур (наприклад, обчислення суми цін)
    def process_large_json(data):
        total_price = sum([product['price'] for product in data])
        return total_price
    
    # Головна функція
    def main():
        website_url = 'https://example.com/products'  # Замініть на реальний URL
        api_endpoint = 'https://your-api.com/data'  # Замініть на реальний API endpoint
        n8n_workflow_id = 'YOUR_N8N_WORKFLOW_ID'
        n8n_api_key = 'YOUR_N8N_API_KEY'
    
        soup = scrape_website(website_url)
        products = extract_data(soup)
        total_price = process_large_json(products)
    
        # Відправка даних на API
        api_response = send_data_to_api(products, api_endpoint)
    
        # Запуск n8n workflow
        trigger_n8n_workflow(products, n8n_workflow_id, n8n_api_key)
    
        print(f"Загальна ціна продуктів: {total_price}")
    
    if __name__ == "__main__":
        main()
    

    Розбір логіки та підводні камені

    • Використання Selenium: Якщо веб-сайт використовує JavaScript для динамічного завантаження контенту, `requests` не зможе отримати повний HTML. У цьому випадку використовується `Selenium` для рендерингу сторінки в браузері та отримання відрендереного HTML. Не забудьте встановити та налаштувати `ChromeDriver`.
    • Обробка помилок: Код містить блоки `try…except` для обробки помилок HTTP та помилок при витягуванні даних. Важливо ретельно обробляти помилки, щоб система була надійною.
    • CSS селектори: CSS селектори, використані для витягування даних (`div.product`, `h2.product-name`, `span.price`), повинні відповідати структурі HTML веб-сайту. Перевіряйте їх за допомогою інструментів розробника в браузері.
    • Інтеграція n8n: n8n дозволяє створювати складні workflows для обробки даних, надсилання email, інтеграції з іншими сервісами та багато іншого. У прикладі workflow запускається з даними, отриманими з веб-сайту.
    • Безпека: Зберігайте API ключі та паролі в безпечному місці, наприклад, у змінних середовища. Не зберігайте їх безпосередньо в коді.
    • Масштабування: Для великих проектів розгляньте використання асинхронного програмування (наприклад, `asyncio`) для паралельного виконання завдань та підвищення продуктивності.
    • Обмеження швидкості (Rate Limiting): Веб-сайти можуть мати обмеження на кількість запитів. Дотримуйтесь правил `robots.txt` та реалізуйте затримки між запитами, щоб уникнути блокування.

    Схоже з цієї категорії:

    Залишити відповідь

    Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *