Рубрики
Без рубрики

Чтение и запись HTML-таблиц с помощью Панд

В этой статье мы узнаем, как загружать и экспортировать данные HTML – таблицы в фрейм данных Pandas и из него.

Автор оригинала: Naazneen Jatu.

Чтение и запись HTML-таблиц с помощью Панд

Вступление

Язык гипертекстовой разметки (HTML) – это стандартный язык разметки для создания веб-страниц. Мы можем визуализировать табличные данные с помощью HTML-элемента . Библиотека анализа данных Pandas предоставляет такие функции, как read_html() и to_html () , поэтому мы можем импортировать и экспортировать данные в фреймы данных.

В этой статье мы узнаем, как считывать табличные данные из HTML-файла и загружать их в фрейм данных Pandas. Мы также узнаем, как записывать данные из фрейма данных Pandas и в HTML-файл.

Примечание: В этой статье мы будем читать и писать HTML элементы. Эта статья не включает в себя синтаксический анализ всего HTML-файла.

Чтение HTML

Мы можем читать таблицы HTML-файла с помощью функции read_html () . Эта функция считывает таблицы HTML-файлов в виде фреймов данных Pandas. Он может читать из файла или URL-адреса.

Давайте посмотрим на каждый источник входного сигнала один за другим.

Чтение HTML-Данных Из файла

Для этого раздела мы будем использовать один набор входных данных. Одна таблица содержит языки программирования и год их создания. В другой таблице указаны размеры земельных участков и их стоимость в долларах США.

Сохраните следующее HTML-содержимое в файле с именем table_data.html :






  
  Table Data



  
Programming Language Creator Year
C Dennis Ritchie 1972
Python Guido Van Rossum 1989
Ruby Yukihiro Matsumoto 1995
Area (sq.ft) Price (USD)
12000 500
32000 700

Pandas нуждается в помощи другой библиотеки, называемой lxml для анализа HTML-и XML-файлов. Для работы функции read_html() вам необходимо установить lxml :

$ pip install lxml

После установки lmxl мы можем использовать функцию read_html () . Он возвращает список фреймов данных, где каждый фрейм данных является целым элементом таблицы данного HTML-файла. Мы обращаемся к каждой таблице как к фрейму данных, индексируя список.

Приведенный ниже код демонстрирует использование функции read_html() для чтения таблиц из HTML-файла:

import pandas as pd

tables = pd.read_html('table_data.html')
print('Tables found:', len(tables))
df1 = tables[0]  # Save first table in variable df1
df2 = tables[1]  # Saving next table in variable df2

print('First Table')
print(df1)
print('Another Table')
print(df2)

Примечание : Хотя вам нужно установить lxml , вам не нужно импортировать его в свою программу, чтобы панды работали.

Выполнение приведенного выше кода на интерпретаторе Python приведет к следующему результату:

Tables found: 2
First Table
  Programming Language             Creator  Year
0                    C      Dennis Ritchie  1972
1               Python    Guido Van Rossum  1989
2                 Ruby  Yukihiro Matsumoto  1995
Another Table
   Area (sq.ft)  Price (USD)
0         12000          500
1         32000          700

Чтение HTML-Данных Из URL-Адреса

Точно так же, как мы читаем элементы таблицы из HTML-файла, мы также можем читать элементы таблицы из HTML-веб-страницы в фрейм данных с помощью read_html() . Однако вместо имени файла мы предоставим такой URL-адрес:

read_html('https://en.wikipedia.org/wiki/Python_(programming_language)')

И он вернет список фреймов данных, где каждый фрейм данных представляет элемент таблицы из данного URL-адреса.

Вот пример кода для чтения элементов таблицы из URL-адреса веб-сайта с помощью Pandas:

import pandas as pd

tables = pd.read_html('https://en.wikipedia.org/wiki/Python_(programming_language)')
print('Tables found:', len(tables))
df1 = tables[0]  # Save first table in variable df1
print('First Table')
print(df1.head())  # To print first 5 rows

Если мы успешно запустим приведенный выше код, то увидим результат следующим образом:

Tables found: 10
First Table
                0                                                  1
0             NaN                                                NaN
1        Paradigm  Multi-paradigm: functional, imperative, object...
2     Designed by                                   Guido van Rossum
3       Developer                         Python Software Foundation
4  First appeared                              1991; 29 years ago[1]

Чтение HTML-Данных Из URL-Адреса, Требующего Аутентификации

Мы знаем, что можем читать элементы таблицы с веб-сайта. Однако, когда сайт требует проверки подлинности, код сталкивается со следующим исключением:

raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 401: UNAUTHORIZED

Для чтения данных из таких URL-адресов мы будем использовать модуль requests . Вы можете установить его с помощью pip :

$ pip install requests

Теперь мы будем использовать метод get() из библиотеки requests для запроса URL-адреса веб-сайта, предоставляя необязательный параметр auth , если сайт требует аутентификации.

Этот метод возвращает объект ответа с веб-страницы. Мы можем проверить код состояния (чтобы убедиться, что содержимое определенно есть) и получить текст из объекта ответа, а затем преобразовать таблицу в фрейм данных.

Давайте рассмотрим пример использования requests для получения данных, требующих аутентификации. Для этой цели мы используем https://httpbin.org :

import requests

r = requests.get('https://httpbin.org/basic-auth/john/johnspassword', auth=('john', 'johnspassword'))

print(r.status_code)
print(r.text)

При выполнении приведенного выше кода мы можем увидеть следующие выходные данные:

200
{
  "authenticated": true, 
  "user": "john"
}

Это показывает, что мы успешно получили доступ к содержимому веб-страницы аутентифицированного URL-адреса. Однако этот веб-сайт содержит только данные JSON, и нам нужны элементы HTML-таблицы в качестве фреймов данных.

Давайте придерживаться более раннего URL-адреса и использовать requests для чтения HTML-таблиц в качестве фреймов данных. В то время как предыдущий сайт был общедоступным, шаги для доступа к аутентифицированному контенту те же.

Как только мы получим ответ, мы можем передать метод r.text в read_html () . И, как обычно, мы получим список таблиц, которые он содержит в виде фреймов данных:

import pandas as pd
import requests

# Can use auth parameter for authenticated URLs
r = requests.get('https://en.wikipedia.org/wiki/Python_(programming_language)',
                 auth=('john', 'johnspassword'))
tables = pd.read_html(r.text)
print('Tables found:', len(tables))
df1 = tables[0]
print('First Table')
print(df1.head())

Запуск этого кода приведет к получению следующих выходных данных:

Tables found: 10
First Table
                0                                                  1
0             NaN                                                NaN
1        Paradigm  Multi-paradigm: functional, imperative, object...
2     Designed by                                   Guido van Rossum
3       Developer                         Python Software Foundation
4  First appeared                              1991; 29 years ago[1]

Написание HTML-таблиц с помощью Python’s Pandas

Мы успешно прочитали данные из HTML-таблиц. Давайте запишем фрейм данных Pandas в HTML-файл. Это может быть достигнуто с помощью метода to_html () .

to_html() принимает путь к файлу, в который вы хотите экспортировать данные. Если вы не укажете абсолютный путь, он сохранит файл относительно текущего каталога.

Вы можете экспортировать фрейм данных в HTML-таблицу следующим образом:

import pandas as pd

df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df.to_html('write_html.html')

Этот код создаст следующий файл write_html.html в текущем

A B
0 1 3
1 2 4

Обратите внимание, что экспорт-это не весь HTML-документ, а только HTML-код

Написание стилизованных HTML таблиц с пандами Python

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

Скрыть индекс

Если мы не хотим включать индекс в вывод таблицы, мы можем установить index=False в to_html() :

import pandas as pd

df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df.to_html('write_html.html', index=False)

Этот код производит write_html.html файл со следующим содержимым:

A B
1 3
2 4
Граница Пеленального столика

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

Следующий код изменяет границу на 3 пикселя:

import pandas as pd

df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df.to_html('write_html.html', border=3)

Сгенерированный файл теперь устанавливает атрибут границы таблицы в значение “3”:

A B
0 1 3
1 2 4
Выравнивание текста

По умолчанию текст заголовка таблицы выровнен по правому краю. Мы меняем это выравнивание с помощью параметра justify . Например, выполнение justify="center" добавит style="text-align: center;" в тег тега .

Давайте попробуем выровнять текст заголовка по центру и посмотрим результаты:

import pandas as pd

df = pd.DataFrame({'A': [1, 'AAA'], 'B': ['BBB', 4]})
df.to_html('write_html.html', justify='center')

Таблица, созданная приведенным выше кодом, выглядит следующим образом:

A B
0 1 BBB
1 AAA 4

Текст заголовка таблицы теперь красиво выровнен по центру.

Вывод

В этом уроке мы узнали, как импортировать и экспортировать данные HTML-таблиц с помощью фреймов данных Pandas. Мы загрузили данные HTML-таблицы из файлов, а также из URL-адресов веб – страниц. В случае аутентифицированных URL-адресов мы использовали модуль запросов для аутентификации и извлечения данных сайта, а затем передали текст ответа в функцию read_html () .

Мы также написали фрейм данных Pandas в виде HTML-файла с помощью функции to_html () . Затем мы стилизовали сгенерированную таблицу, передав несколько необязательных параметров, таких как index , border и justify . Это позволяет легко записывать данные фрейма данных в презентационной манере.