ПИТОН

2 простых способа получить таблицы с веб-сайта с помощью Pandas

Обзор pd.read_html и pd.read_clipboard

Библиотека pandas хорошо известна своими простыми в использовании возможностями анализа данных. Он оснащен расширенными функциями индексирования, объединения DataFrame и агрегирования данных. Pandas также имеет комплексный API ввода-вывода, который вы можете использовать для ввода данных из различных источников и вывода данных в различные форматы.

Есть много случаев, когда вам просто нужно получить таблицу с веб-сайта для использования в своем анализе. Вот посмотрите, как вы можете использовать pandas read_html и read_clipboard для получения таблиц с веб-сайтов всего с помощью пары строк кода.

Обратите внимание: перед тем, как пробовать какой-либо из приведенных ниже кодов, не забудьте импортировать панды.

import pandas as pd

1. pandas.read_html ()

Давайте попробуем получить эту таблицу с ключевыми руководителями Tesla для этого примера:

Функция read_html имеет следующее описание:

Чтение таблиц HTML в list из DataFrame объектов.

Функция выполняет поиск тегов, связанных с HTML ‹table›, на вводимых вами входных данных (URL). Он всегда возвращает список, даже если на сайте только одна таблица. Чтобы использовать функцию, все, что вам нужно сделать, это указать URL-адрес нужного сайта в качестве первого аргумента функции. Запуск функции для сайта Yahoo Finance выглядит так:

pd.read_html('https://finance.yahoo.com/quote/TSLA/profile?p=TSLA')

Чтобы получить DataFrame из этого списка, вам нужно сделать только одно добавление:

pd.read_html('https://finance.yahoo.com/quote/TSLA/profile?p=TSLA')[0]

Добавление «[0]» выбирает первый элемент в списке. В нашем списке только один элемент, и это объект DataFrame. Запуск этого кода дает вам следующий результат:

Теперь давайте попробуем получить эту таблицу со сводной статистикой по акциям Tesla:

Попробуем тот же код, что и раньше:

pd.read_html('https://finance.yahoo.com/quote/TSLA?p=TSLA')

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

separate = pd.read_html('https://finance.yahoo.com/quote/TSLA?p=TSLA')
pd.concat([separate[0],separate[1]])

Вы можете сделать еще много, чтобы обработать эти данные для анализа - просто переименование заголовков столбцов станет отличным началом. Но на это ушло около 12 секунд, что отлично, если вам просто нужны тестовые данные со статического сайта.

2. pandas.read_clipboard ()

Вот таблица с информацией о компаниях S&P 500, которую мы можем попытаться получить:

Данные распространяются по лицензии ODC, что означает, что вы можете бесплатно делиться, создавать и адаптировать данные на сайте. Изначально я собирался использовать этот сайт для своего примера read_html, но после того, как я запустил функцию в третий раз, меня встретили с ошибкой.

pd.read_html('https://datahub.io/core/s-and-p-500-companies')

Ошибка HTTP 403 возникает, когда вы пытаетесь получить доступ к веб-странице, и сайт успешно понимает ваш запрос, но не авторизует его. Это может произойти, когда вы пытаетесь получить доступ к сайту, к которому у вас нет доступа.

В этом случае вы можете получить доступ к сайту из браузера, но сайт не позволит вам получить к нему доступ из скрипта. На многих сайтах есть правила парсинга в файле robots.txt, который можно найти, добавив «/robots.txt» после домена верхнего уровня URL-адреса сайта. Например, Facebook будет «https://facebook.com/robots.txt».

Чтобы избежать подобной ошибки, у вас может возникнуть соблазн скопировать данные на лист Excel, а затем загрузить этот файл с помощью функции pd.read_excel.

Вместо этого pandas предлагает функцию, которая позволяет копировать данные прямо из буфера обмена! Функция read_clipboard имеет следующее описание:

Прочитать текст из буфера обмена и передать в read_csv

Если вы раньше использовали pandas, вы, вероятно, использовали pd.read_csv для получения локального файла для использования при анализе данных. Функция read_clipboard просто берет скопированный вами текст и обрабатывает его, как если бы это был CSV-файл. Он вернет DataFrame на основе скопированного текста.

Чтобы получить таблицу S&P 500 с datahub.io, выберите и скопируйте таблицу из своего браузера, затем введите код ниже.

pd.read_clipboard()

Идеально! У нас есть готовый к использованию DataFrame, точно такой, как видно на веб-сайте!

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

Удачи вам с вводом / выводом!