Перенос разметки страницы в Excel: 5 проверенных способов с сохранением структуры

Перенос данных с веб-страниц в Microsoft Excel или Google Таблицы — задача, с которой сталкиваются аналитики, маркетологи и разработчики. Чаще всего требуется не просто скопировать текст, а сохранить иерархическую структуру разметки: таблицы, списки, вложенные блоки. Без правильного подхода вы получите бессвязный набор данных, который придётся часами обрабатывать вручную.

В этой статье мы разберём 5 способов импорта разметки — от простых (для новичков) до автоматизированных (для работы с большими объёмами данных). Вы узнаете, как извлечь данные из <table>, <div> и других HTML-элементов, сохранив их связь, а также избежать типичных ошибок при парсинге. Особое внимание уделим динамическим страницам, где контент подгружается через JavaScript.

Если вам нужно перенести разметку одной страницы — подойдут встроенные инструменты Excel. Для массовой обработки сотен URL потребуются скрипты на Python или специализированные сервисы. Мы покажем примеры кода и сравним их эффективность.

📊 Как часто вы переносите данные с веб-страниц в Excel?
Ежедневно
Раз в неделю
Редко
Никогда

1. Копирование таблиц напрямую: когда работает и почему ломается

Самый очевидный способ — выделить таблицу на странице и вставить её в Excel через буфер обмена (Ctrl+CCtrl+V). В 60% случаев это срабатывает, но есть 3 ключевые проблемы:

  • 🔴 Сложные таблицы с объединёнными ячейками (colspan/rowspan) вставляются криво — Excel игнорирует атрибуты объединения.
  • 🔴 Динамический контент (например, данные, подгружаемые при скролле) не копируется — в буфер попадает только видимая часть.
  • 🔴 Стили и форматирование (цвета, шрифты) теряются — переносится только "голый" текст.

Чтобы повысить шансы на успех:

  1. Откройте исходный код страницы (Ctrl+U или правая кнопка → Просмотр кода страницы).
  2. Найдите тег <table> с нужными данными (используйте поиск по странице — Ctrl+F).
  3. Скопируйте весь блок <table>...</table> и вставьте в Excel.
⚠️ Внимание: Если таблица сформирована через JavaScript (например, в React-приложениях), в исходном коде вы увидите пустой <div id="root">. В этом случае прямым копированием не обойтись — читайте раздел про парсинг.

☑️ Подготовка к копированию таблицы

Выполнено: 0 / 4

2. Импорт данных через Power Query: полуавтоматический метод

Power Query (в Excel 2016+) позволяет подключаться к веб-страницам как к источникам данных и извлекать таблицы с сохранением структуры. Этот метод подходит для регулярного обновления данных — например, если вам нужно еженедельно парсить курсы валют или статистику продаж.

Пошаговая инструкция:

  1. Перейдите на вкладку ДанныеПолучить данныеИз других источниковИз веб.
  2. Вставьте URL страницы и нажмите OK. Excel покажет список всех таблиц на странице (включая скрытые).
  3. Выберите нужную таблицу и нажмите Загрузить или Преобразовать данные для предварительной обработки.

Преимущества метода:

  • 🔹 Сохраняет структуру таблиц, включая colspan/rowspan.
  • 🔹 Позволяет обновлять данные одним кликом (правой кнопкой по таблице → Обновить).
  • 🔹 Фильтрует "мусорные" таблицы (например, меню навигации сайта).
⚠️ Внимание: Power Query не обрабатывает данные, загружаемые через AJAX. Если после импорта вы видите пустые ячейки — страница использует динамическую подгрузку. Попробуйте добавить параметр ?_escaped_fragment_= к URL (например, site.com/page?_escaped_fragment_=) — это заставит сервер отдать статическую версию.
Формат данных Power Query Прямое копирование Парсинг через Python
Статические таблицы (<table>) ✅ Да ✅ Да (частично) ✅ Да
Динамический контент (AJAX) ❌ Нет ❌ Нет ✅ Да (с Selenium)
Вложенные списки (<ul>/<ol>) ❌ Нет ❌ Нет ✅ Да
Сохранение форматирования ❌ Нет ❌ Нет ⚠️ Частично (через стили)

3. Парсинг через Python: для сложных страниц и массовой обработки

Если вам нужно извлечь данные со сотни страниц или работать с динамическим контентом, ручные методы не подойдут. Здесь поможет Python с библиотеками requests, BeautifulSoup и pandas. Этот способ требует базовых знаний программирования, но даёт максимальную гибкость.

Пример кода для извлечения таблицы с сайта и сохранения в Excel:

import requests

from bs4 import BeautifulSoup

import pandas as pd

Загружаем страницу

url = "https://example.com/data"

response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')

Находим первую таблицу на странице

table = soup.find('table')

rows = table.find_all('tr')

Парсим данные в список списков

data = []

for row in rows:

cols = row.find_all('td')

cols = [col.text.strip() for col in cols]

data.append(cols)

Сохраняем в Excel

df = pd.DataFrame(data[1:], columns=data[0]) # Первая строка - заголовки

df.to_excel("output.xlsx", index=False)

Для динамических страниц используйте Selenium:

from selenium import webdriver

import time

driver = webdriver.Chrome()

driver.get("https://example.com/dynamic-data")

time.sleep(3) # Ждём подгрузки данных

Получаем HTML после выполнения JavaScript

html = driver.page_source

soup = BeautifulSoup(html, 'html.parser')

Далее парсинг как в примере выше

headers = {'User-Agent': 'Mozilla/5.0', 'Referer': 'https://example.com'} response = requests.get(url, headers=headers)-->

4. Экспорт разметки в JSON/CSV: промежуточный формат

Иногда удобнее сначала преобразовать HTML-разметку в JSON или CSV, а затем импортировать в Excel. Это актуально, если:

  • 📌 Данные имеют сложную вложенность (например, карточки товаров с характеристиками).
  • 📌 Нужно очистить "мусор" (рекламу, меню) перед импортом.
  • 📌 Требуется объединить данные с нескольких страниц.

Сервисы для конвертации:

  • 🔧 TableConvert — преобразует HTML-таблицы в CSV/Excel/JSON.
  • 🔧 ConvertCSV — поддерживает вложенные таблицы.
  • 🔧 CodeBeautify — для преобразования произвольной разметки.

Пример работы с CodeBeautify:

  1. Скопируйте исходный код страницы (Ctrl+U).
  2. Вставьте его в поле на сайте и выберите формат вывода (например, JSON).
  3. Скачайте результат и импортируйте в Excel через Данные → Из текста/CSV.
⚠️ Внимание: Бесплатные сервисы ограничивают объём данных (обычно до 500 КБ). Для больших страниц используйте локальные инструменты вроде Pandas или OpenRefine.
Как обработать JSON с вложенными объектами в Excel?

Excel не умеет автоматически "расплющивать" вложенные JSON-структуры. Используйте Power Query:

  1. Импортируйте JSON через Данные → Получить данные → Из файла → Из JSON.
  2. В редакторе Power Query нажмите на иконку рядом с колонкой вложенных данных.
  3. Выберите поля для извлечения и подтвердите.

Если данных много, предварительно преобразуйте JSON в плоскую таблицу через Python (pd.json_normalize()).

5. Работа с API: когда разметки нет, но есть структурированные данные

Многие сайты (особенно сервисы аналитики, биржи, соцсети) предоставляют API для доступа к данным. Это удобнее парсинга, так как:

  • 🔹 Данные уже структурированы (чаще всего в JSON или XML).
  • 🔹 Нет риска блокировки за парсинг.
  • 🔹 Можно запрашивать только нужные поля (экономит трафик).

Пример: импорт курсов валют с ЦБ РФ:

import requests

import pandas as pd

API Центрального Банка РФ

url = "https://www.cbr.ru/scripts/XML_daily.asp"

response = requests.get(url)

data = pd.read_xml(response.text)

Сохраняем в Excel

data.to_excel("courses.xlsx")

Где искать API:

  • 🔍 В документации сайта (раздел API или Для разработчиков).
  • 🔍 На специализированных платформах: RapidAPI, Apify, ScraperAPI.
  • 🔍 Через расширения браузера вроде JSON Formatter (показывает API-запросы на странице).

6. Обработка неструктурированных данных: тексты, списки, блоки

Не вся разметка представлена в виде таблиц. Часто требуется извлечь:

  • 📋 Списки (<ul>/<ol>) — например, меню категорий.
  • 📋 Карточки товаров — название, цена, характеристики в произвольных <div>.
  • 📋 Текстовые блоки — статьи, описания, комментарии.

Для таких случаев используйте:

  1. XPath — язык запросов для выборки элементов по структуре. Пример:
    //div[@class="product"]//h2/text()  # Все заголовки товаров
  2. CSS-селекторы — более простой синтаксис:
    div.product > h2  # Заголовки внутри блоков с классом product
  3. Регулярные выражения — для извлечения данных по шаблону (например, цен в формате 1 234 ₽).

Пример парсинга списка с помощью BeautifulSoup:

from bs4 import BeautifulSoup

import requests

url = "https://example.com/catalog"

response = requests.get(url)

soup = BeautifulSoup(response.text, 'html.parser')

Извлекаем все пункты списка

items = soup.select('ul.menu li a')

data = [{"text": item.text, "link": item['href']} for item in items]

Сохраняем в Excel

pd.DataFrame(data).to_excel("menu.xlsx")

⚠️ Внимание: При парсинге текстовых блоков учитывайте "шум" — лишние пробелы, переносы строк, HTML-теги. Очищайте данные с помощью:
import re

text = re.sub(r'\s+', ' ', item.text).strip() # Заменяем все пробелы на один

Сравнение методов: какой выбрать для вашей задачи

Критерий Прямое копирование Power Query Python + BeautifulSoup Python + Selenium API
Сложность реализации ⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐ ⭐⭐
Поддержка динамического контента
Массовая обработка (100+ страниц) ⚠️ (ручное обновление)
Сохранение структуры (вложенность, стили) ⚠️ Частично
Требуются навыки программирования ⚠️ (для работы с API)

Рекомендации по выбору:

  • 📌 1–10 страниц со статичными таблицамиPower Query или прямое копирование.
  • 📌 Сложные страницы с JavaScriptPython + Selenium.
  • 📌 Регулярное обновление данныхAPI или Power Query.
  • 📌 Одноразовый парсинг неструктурированных данныхPython + BeautifulSoup.

FAQ: Ответы на частые вопросы

Можно ли автоматически обновлять данные в Excel при изменении на сайте?

Да, если использовать Power Query или API. В Power Query настройте автоматическое обновление по расписанию:

  1. Перейдите на вкладку ДанныеОбновить всеСвойства.
  2. Установите флажок Обновлять при открытии файла.
  3. Для обновления по времени используйте Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки внешних данных.

Для API напишите скрипт на Python, который будет запускаться по расписанию (например, через Windows Task Scheduler) и обновлять Excel-файл.

Как спарсить данные с сайта, который требует авторизацию?

Есть 3 способа:

  1. Ручной экспорт: Авторизуйтесь в браузере, скопируйте куки и используйте их в запросах (например, через requests.Session() в Python).
  2. Selenium: Автоматизируйте авторизацию через браузер:
    from selenium import webdriver
    

    driver = webdriver.Chrome()

    driver.get("https://example.com/login")

    driver.find_element_by_id("username").send_keys("your_login")

    driver.find_element_by_id("password").send_keys("your_password")

    driver.find_element_by_id("submit").click()

  3. API с токеном: Многие сервисы (например, Google Analytics, Facebook) позволяют получать токен доступа для работы с API.
⚠️ Внимание: Парсинг авторизованных страниц может нарушать пользовательское соглашение. Проверьте раздел Terms of Service на целевом сайте.
Почему Excel неправильно распознаёт числа и даты при импорте?

Проблема возникает из-за:

  • 🔢 Локальных настроек: Excel использует системные разделители (запятая или точка для дробей). Перед импортом установите правильный разделитель в Файл → Параметры → Дополнительно → Разделители.
  • 🔢 Формата ячеек: Даты в формате DD/MM/YYYY могут распознаваться как MM/DD/YYYY. После импорта выделите колонку и выберите Главная → Формат → Форматировать ячейки → Дата.
  • 🔢 Лишних символов: Удалите валюты, пробелы в числах (например, 1 0001000) через Найти и заменить (Ctrl+H).

Для массовой обработки используйте Power Query:

  1. В редакторе Power Query выделите колонку с датами.
  2. Нажмите Преобразовать → Тип данных → Дата.
  3. Укажите правильный формат вручную.
Как извлечь данные из PDF или скриншота страницы?

Для PDF:

  • 📄 Используйте Adobe Acrobat Pro (инструмент Экспорт в Excel).
  • 📄 Бесплатные альтернативы: Tabula (Java), PDFtoExcel (онлайн).

Для скриншотов:

  • 🖼️ Google Drive: Загрузите изображение, правая кнопка → Открыть с помощью → Google Таблицы (распознаёт текст через OCR).
  • 🖼️ Специализированные инструменты: ABBYY FineReader, OnlineOCR.net.

Точность распознавания зависит от качества изображения. Для таблиц используйте выравнивание по сетке в настройках OCR.

Можно ли спарсить данные с мобильной версии сайта?

Да, но учитывайте различия в разметке:

  1. В Python добавьте заголовок User-Agent для мобильного браузера:
    headers = {
    

    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1'

    }

  2. В Power Query мобильную версию сайта часто можно открыть по URL m.example.com или добавив параметр ?mobile=1.
  3. Используйте инструменты разработчика в браузере (F12Ctrl+Shift+M) для эмуляции мобильного устройства и проверки разметки.

Мобильные версии часто содержат упрощённую разметку, что может упростить парсинг (меньше "мусора").