Ordelio

Как сохранить таблицу с сайта в CSV-файл

CSV-файл — это простой текст, который может прочитать любая программа для работы с таблицами и базами данных. Перенести веб-таблицу в такой формат нетрудно; сложно сделать это без кракозябр вместо букв, неверного разделителя или пропавших нулей. Вот четыре способа и подводные камни каждого из них.

1. Скопировать, вставить в Excel, затем сохранить как

Выделите таблицу, скопируйте её, вставьте в пустой лист Excel, затем воспользуйтесь командой сохранения в меню «Файл» и выберите тип файла CSV UTF-8.

Подходит для: небольшой таблицы, которая нужна один раз, когда у вас уже открыт Excel.

Где не работает: если выбрать обычный тип CSV вместо CSV UTF-8, все символы вне вашей кодировки Windows (ударения, кириллица, китайские иероглифы) превратятся в вопросительные знаки. Кроме того, Excel записывает разделитель, заданный в региональных настройках Windows, поэтому на многих европейских компьютерах ваш файл с «разделителями-запятыми» на самом деле разделяется точкой с запятой, а программа для чтения может ожидать запятые. При вставке также могут пропасть ведущие нули (код вроде 01234 превращается в 1234), значения вроде 1-2 могут превратиться в даты, а выделение может прихватить лишний текст вокруг таблицы.

2. Google Таблицы: вставить и скачать

Вставьте таблицу в файл Google Таблицы, затем откройте меню «Файл», пункт «Скачать» и выберите формат «Значения, разделенные запятыми (.csv)».

Подходит для: любого компьютера с браузером, Excel не нужен, а файл всегда сохраняется в кодировке UTF-8.

Где не работает: в файле всегда используются запятые, из-за чего Excel в регионах с десятичной запятой может не разбить данные по столбцам при двойном клике. Скачивается только тот лист, который вы просматриваете, а не весь файл. Как и Excel, Таблицы при вставке могут превратить некоторые значения в даты или числа.

3. Python: pandas.read_html

Если вы уже пишете на Python, библиотека pandas умеет считывать все таблицы на странице и сохранять одну из них в CSV:

pandas.read_html("https://example.com/page")[0].to_csv("table.csv", index=False)

Число в скобках — это порядковый номер таблицы на странице (0 для первой). Вам понадобятся установленные pandas и lxml.

Подходит для: обработки одной и той же страницы каждую неделю или сотен страниц с помощью скрипта.

Где не работает: некоторые сайты отвечают на запрос ошибкой 403, так как обращение не похоже на браузер, поэтому приходится скачивать страницу самостоятельно и передавать HTML в pandas. Инструмент не видит страницы за авторизацией или таблицы, которые подгружает JavaScript. Сноски вроде [1] остаются в заголовках и значениях, а целые числа могут превратиться в 8021407192.0, если в каком-то ряду столбца окажется пустая ячейка.

4. Расширение для браузера: один клик на нужной странице

Расширение работает прямо со страницей в вашем браузере, поэтому оно справляется и после входа в аккаунт, и с таблицами на JavaScript. Мы создали такое расширение — Ordelio Копия таблиц (бесплатно, без ограничений по строкам):

  1. Откройте страницу и нажмите на значок расширения (или нажмите Alt+Shift+Y). Появится список всех таблиц на странице, начиная с самой большой; при наведении на таблицу она подсвечивается.
  2. Нажмите CSV: браузер сохранит файл с этой таблицей. Буквы не испортятся, так как файл сохраняется в UTF-8 со специальной меткой для Excel, а разделителем ставится точка с запятой, если в вашем языке в дробях используется запятая (в настройках можно принудительно выбрать запятую, точку с запятой или табуляцию).

Инструмент также удаляет сноски вроде [1], дублирует объединенные ячейки, чтобы столбцы не смещались, и записывает коды вроде 01234 в файл точно так же, как они выглядят на странице (открывающая файл программа всё же может превратить их в числа).

Где не работает: сохраняется то, что отображается на странице в данный момент, поэтому для таблиц, разбитых на несколько страниц, потребуется по файлу на каждую страницу, а сам файл не обновляется автоматически, в отличие от скрипта.

Установить Ordelio Копия таблиц для Microsoft Edge Версии для Chrome и Firefox находятся на проверке.

Что выбрать

Сохранить как в ExcelGoogle ТаблицыpandasРасширение
Страницы за входом в аккаунтДа (через копирование)Да (через копирование)НетДа
Буквы и символы не портятсяТолько с CSV UTF-8ДаДаДа
Настраиваемый разделительНет (задается Windows)Нет (всегда запятые)Да (параметр)Да (настройка)
Сотни страниц за один разНетНетДаНет
Время на одну новую страницуОколо минутыОколо минутыМинуты в первый разПара секунд

Кратко: для скрипта, который запускается каждую неделю на публичных страницах, используйте pandas. Для разового сохранения со страницы, которую вы читаете (особенно под авторизацией), берите данные прямо со страницы.

Нашли таблицу, с которой не справился ни один из способов? Расскажите нам, мы читаем каждое сообщение.