Перенос данных с веб-страниц в Microsoft Excel или Google Таблицы — задача, с которой сталкиваются аналитики, маркетологи и разработчики. Чаще всего требуется не просто скопировать текст, а сохранить иерархическую структуру разметки: таблицы, списки, вложенные блоки. Без правильного подхода вы получите бессвязный набор данных, который придётся часами обрабатывать вручную.
В этой статье мы разберём 5 способов импорта разметки — от простых (для новичков) до автоматизированных (для работы с большими объёмами данных). Вы узнаете, как извлечь данные из <table>, <div> и других HTML-элементов, сохранив их связь, а также избежать типичных ошибок при парсинге. Особое внимание уделим динамическим страницам, где контент подгружается через JavaScript.
Если вам нужно перенести разметку одной страницы — подойдут встроенные инструменты Excel. Для массовой обработки сотен URL потребуются скрипты на Python или специализированные сервисы. Мы покажем примеры кода и сравним их эффективность.
1. Копирование таблиц напрямую: когда работает и почему ломается
Самый очевидный способ — выделить таблицу на странице и вставить её в Excel через буфер обмена (Ctrl+C → Ctrl+V). В 60% случаев это срабатывает, но есть 3 ключевые проблемы:
- 🔴 Сложные таблицы с объединёнными ячейками (
colspan/rowspan) вставляются криво — Excel игнорирует атрибуты объединения. - 🔴 Динамический контент (например, данные, подгружаемые при скролле) не копируется — в буфер попадает только видимая часть.
- 🔴 Стили и форматирование (цвета, шрифты) теряются — переносится только "голый" текст.
Чтобы повысить шансы на успех:
- Откройте исходный код страницы (
Ctrl+Uили правая кнопка →Просмотр кода страницы). - Найдите тег
<table>с нужными данными (используйте поиск по странице —Ctrl+F). - Скопируйте весь блок
<table>...</table>и вставьте в Excel.
⚠️ Внимание: Если таблица сформирована через JavaScript (например, в React-приложениях), в исходном коде вы увидите пустой <div id="root">. В этом случае прямым копированием не обойтись — читайте раздел про парсинг.
☑️ Подготовка к копированию таблицы
2. Импорт данных через Power Query: полуавтоматический метод
Power Query (в Excel 2016+) позволяет подключаться к веб-страницам как к источникам данных и извлекать таблицы с сохранением структуры. Этот метод подходит для регулярного обновления данных — например, если вам нужно еженедельно парсить курсы валют или статистику продаж.
Пошаговая инструкция:
- Перейдите на вкладку
Данные→Получить данные→Из других источников→Из веб. - Вставьте URL страницы и нажмите
OK. Excel покажет список всех таблиц на странице (включая скрытые). - Выберите нужную таблицу и нажмите
ЗагрузитьилиПреобразовать данныедля предварительной обработки.
Преимущества метода:
- 🔹 Сохраняет структуру таблиц, включая
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:
- Скопируйте исходный код страницы (
Ctrl+U). - Вставьте его в поле на сайте и выберите формат вывода (например,
JSON). - Скачайте результат и импортируйте в Excel через
Данные → Из текста/CSV.
⚠️ Внимание: Бесплатные сервисы ограничивают объём данных (обычно до 500 КБ). Для больших страниц используйте локальные инструменты вроде Pandas или OpenRefine.
Как обработать JSON с вложенными объектами в Excel?
Excel не умеет автоматически "расплющивать" вложенные JSON-структуры. Используйте Power Query:
- Импортируйте JSON через
Данные → Получить данные → Из файла → Из JSON. - В редакторе Power Query нажмите на иконку
↗рядом с колонкой вложенных данных. - Выберите поля для извлечения и подтвердите.
Если данных много, предварительно преобразуйте 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>. - 📋 Текстовые блоки — статьи, описания, комментарии.
Для таких случаев используйте:
- XPath — язык запросов для выборки элементов по структуре. Пример:
//div[@class="product"]//h2/text() # Все заголовки товаров - CSS-селекторы — более простой синтаксис:
div.product > h2 # Заголовки внутри блоков с классом product - Регулярные выражения — для извлечения данных по шаблону (например, цен в формате
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 retext = re.sub(r'\s+', ' ', item.text).strip() # Заменяем все пробелы на один
Сравнение методов: какой выбрать для вашей задачи
| Критерий | Прямое копирование | Power Query | Python + BeautifulSoup | Python + Selenium | API |
|---|---|---|---|---|---|
| Сложность реализации | ⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐ |
| Поддержка динамического контента | ❌ | ❌ | ❌ | ✅ | ✅ |
| Массовая обработка (100+ страниц) | ❌ | ⚠️ (ручное обновление) | ✅ | ✅ | ✅ |
| Сохранение структуры (вложенность, стили) | ⚠️ Частично | ✅ | ✅ | ✅ | ✅ |
| Требуются навыки программирования | ❌ | ❌ | ✅ | ✅ | ⚠️ (для работы с API) |
Рекомендации по выбору:
- 📌 1–10 страниц со статичными таблицами → Power Query или прямое копирование.
- 📌 Сложные страницы с JavaScript → Python + Selenium.
- 📌 Регулярное обновление данных → API или Power Query.
- 📌 Одноразовый парсинг неструктурированных данных → Python + BeautifulSoup.
FAQ: Ответы на частые вопросы
Можно ли автоматически обновлять данные в Excel при изменении на сайте?
Да, если использовать Power Query или API. В Power Query настройте автоматическое обновление по расписанию:
- Перейдите на вкладку
Данные→Обновить все→Свойства. - Установите флажок
Обновлять при открытии файла. - Для обновления по времени используйте
Параметры → Центр управления безопасностью → Параметры центра управления безопасностью → Настройки внешних данных.
Для API напишите скрипт на Python, который будет запускаться по расписанию (например, через Windows Task Scheduler) и обновлять Excel-файл.
Как спарсить данные с сайта, который требует авторизацию?
Есть 3 способа:
- Ручной экспорт: Авторизуйтесь в браузере, скопируйте куки и используйте их в запросах (например, через
requests.Session()в Python). - Selenium: Автоматизируйте авторизацию через браузер:
from selenium import webdriverdriver = 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()
- API с токеном: Многие сервисы (например, Google Analytics, Facebook) позволяют получать токен доступа для работы с API.
⚠️ Внимание: Парсинг авторизованных страниц может нарушать пользовательское соглашение. Проверьте раздел Terms of Service на целевом сайте.
Почему Excel неправильно распознаёт числа и даты при импорте?
Проблема возникает из-за:
- 🔢 Локальных настроек: Excel использует системные разделители (запятая или точка для дробей). Перед импортом установите правильный разделитель в
Файл → Параметры → Дополнительно → Разделители. - 🔢 Формата ячеек: Даты в формате
DD/MM/YYYYмогут распознаваться какMM/DD/YYYY. После импорта выделите колонку и выберитеГлавная → Формат → Форматировать ячейки → Дата. - 🔢 Лишних символов: Удалите валюты, пробелы в числах (например,
1 000→1000) черезНайти и заменить(Ctrl+H).
Для массовой обработки используйте Power Query:
- В редакторе Power Query выделите колонку с датами.
- Нажмите
Преобразовать → Тип данных → Дата. - Укажите правильный формат вручную.
Как извлечь данные из PDF или скриншота страницы?
Для PDF:
- 📄 Используйте Adobe Acrobat Pro (инструмент
Экспорт в Excel). - 📄 Бесплатные альтернативы: Tabula (Java), PDFtoExcel (онлайн).
Для скриншотов:
- 🖼️ Google Drive: Загрузите изображение, правая кнопка →
Открыть с помощью → Google Таблицы(распознаёт текст через OCR). - 🖼️ Специализированные инструменты: ABBYY FineReader, OnlineOCR.net.
Точность распознавания зависит от качества изображения. Для таблиц используйте выравнивание по сетке в настройках OCR.
Можно ли спарсить данные с мобильной версии сайта?
Да, но учитывайте различия в разметке:
- В 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'
}
- В Power Query мобильную версию сайта часто можно открыть по URL
m.example.comили добавив параметр?mobile=1. - Используйте инструменты разработчика в браузере (
F12→Ctrl+Shift+M) для эмуляции мобильного устройства и проверки разметки.
Мобильные версии часто содержат упрощённую разметку, что может упростить парсинг (меньше "мусора").