Веб-скрейпинг базы патентов Бразилии (INPI) в Excel

    Сбор данных из бразильского реестра патентов INPI - задача, с которой сталкиваются аналитики, патентные поверенные и исследователи. Если вам нужно выгрузить патенты, отфильтрованные по региону заявителя, году подачи, дате одобрения, категории IPC и названию, - автоматизация неизбежна. В этой статье мы разберём, как выполнить парсинг базы данных патентов Бразилии своими силами, даже без глубоких знаний программирования.

    Что такое INPI и какие данные доступны?

    INPI (Instituto Nacional da Propriedade Industrial) - бразильский институт промышленной собственности. Его онлайн-база содержит информацию о заявках на патенты, включая:

    • Имя заявителя с кодом региона в скобках (например, (SP) для Сан-Паулу);
    • Дату подачи заявки (Data do Depósito);
    • Дату одобрения (Data da Concessão), если патент выдан;
    • Классификацию IPC (Classificação IPC);
    • Название патента (Título);
    • Номер заявки (Nº do Pedido).

    Эти данные находятся в карточках патентов, доступных через поисковую форму на сайте busca.inpi.gov.br. Прямого экспорта в Excel не предусмотрено, поэтому требуется веб-скрейпинг.

    Можно ли обойтись без программирования?

    Для разовой небольшой выгрузки (до 100 записей) можно использовать готовые инструменты:

    • Google Sheets + ImportXML/ImportHTML - попробуйте извлечь табличные данные прямо в таблицу. Однако динамическая загрузка и пагинация часто ломают этот метод.
    • Расширения браузера (Data Miner, Web Scraper) - позволяют собирать данные с видимых страниц, но требуют ручного пролистывания.
    • Low-code платформы (Octoparse, ParseHub) - визуальный интерфейс для настройки парсинга, но бесплатные версии ограничены.

    Если нужно регулярно обновлять данные или обрабатывать тысячи патентов, лучше написать скрипт на Python.

    Пошаговый план парсинга на Python

    1. Анализ структуры сайта

    Откройте сайт INPI в браузере, нажмите F12 (Инструменты разработчика) и изучите сетевые запросы. Чаще всего данные подгружаются через AJAX-запросы к API. Найдите URL, который возвращает JSON или HTML с результатами поиска. Для INPI это может быть POST-запрос с параметрами фильтрации.

    2. Выбор библиотек

    Для парсинга динамических сайтов на Python вам понадобятся:

    • requests - для отправки HTTP-запросов к API;
    • BeautifulSoup - если ответ в HTML;
    • json - для работы с JSON-данными;
    • pandas - для создания таблицы и экспорта в Excel;
    • time - для задержек между запросами.

    3. Эмуляция поискового запроса

    Скопируйте параметры запроса из сетевой вкладки. Пример кода для отправки запроса:

    import requests
    import pandas as pd
    
    url = 'https://busca.inpi.gov.br/pePI/jsp/patentes/PatenteSearchAction.do'
    payload = {
        'acao': 'search',
        'nomeDepositante': '',
        'dataDepositoInicio': '01/01/2020',
        'dataDepositoFim': '31/12/2020'
    }
    response = requests.post(url, data=payload)
    print(response.status_code)
    

    Если сайт защищает от ботов, используйте Selenium или Playwright для эмуляции браузера.

    4. Извлечение данных из карточек патентов

    После получения списка заявок перейдите по каждой ссылке на карточку и извлеките нужные поля. Пример с BeautifulSoup:

    from bs4 import BeautifulSoup
    
    soup = BeautifulSoup(response.text, 'html.parser')
    titulo = soup.find('td', text='Título').find_next('td').text.strip()
    

    Для полей с IPC и датами повторите аналогичный поиск. Обработайте случаи, когда поле пустое - запишите 'Не указано' или оставьте пустым.

    5. Фильтрация по регионам

    Регион заявителя указан в скобках в поле 'Nome do Depositante'. Извлеките его с помощью регулярного выражения, например: re.search(r'\((.*?)\)', nome_depositante). Затем отфильтруйте строки по нужным кодам (SP, RJ, MG и т.д.) или по 'BR' для нерезидентов.

    6. Экспорт в Excel

    Соберите все записи в список словарей и преобразуйте в DataFrame:

    import pandas as pd
    
    data = []
    # ... цикл по патентам ...
    data.append({
        'Номер заявки': numero,
        'Название': titulo,
        'Регион': regiao,
        'Дата подачи': data_deposito,
        'Дата одобрения': data_concessao,
        'IPC': ipc
    })
    df = pd.DataFrame(data)
    df.to_excel('patentes_brasil.xlsx', index=False)
    

    Готово! Вы получите файл Excel со всеми отфильтрованными патентами.

    Возможные сложности и как их обойти

    • Антибот-защита: используйте случайные User-Agent, прокси и задержки (time.sleep). Для Selenium добавьте опции headless и disable-blink-features.
    • Большое количество страниц: реализуйте пагинацию, анализируя параметры page или offset в URL.
    • Ошибки в данных: оберните извлечение в try-except, чтобы скрипт не падал на пустых полях.

    Если вы не программист, начните с готового скрипта на GitHub (поищите 'inpi patent scraper') или закажите парсинг у специалиста. Но базовый Python вполне реально освоить за пару дней под эту конкретную задачу.

    Заключение

    Веб-скрейпинг базы патентов INPI - выполнимая задача. Выберите подход: low-code инструменты для малых объёмов или Python-скрипт для гибкости и масштабирования. Следуя описанному плану, вы сможете собрать данные по регионам, годам и классам IPC и выгрузить их в Excel.

    Часто задаваемые вопросы