Мне удалось получить данные из таблицы hmtl через pd.read_html
вот так:
In[1]:
import numpy as np
import pandas as pd
from tabulate import tabulate
URL = "https://coinmarketcap.com/all/views/all/"
df_in_list = pd.read_html(URL, attrs = {'id': 'currencies-all'})
# df_in_list has the df in element 0
df_raw = df_in_list[0]
df = df_in_list[0]
df = df[['#', 'Name', 'Symbol', 'Market Cap', 'Price' ]]
print(tabulate(df.head(), headers='keys', tablefmt='psql'))
Out[1]:
+----+-----+------------------+----------+-----------------+-----------+
| | # | Name | Symbol | Market Cap | Price |
|----+-----+------------------+----------+-----------------+-----------|
| 0 | 1 | BTC Bitcoin | BTC | $95,224,161,781 | $5398.69 |
| 1 | 2 | ETH Ethereum | ETH | $19,256,205,102 | $182.34 |
| 2 | 3 | XRP XRP | XRP | $15,031,762,618 | $0.359679 |
| 3 | 4 | LTC Litecoin | LTC | $5,530,275,811 | $90.24 |
| 4 | 5 | BCH Bitcoin Cash | BCH | $5,514,209,793 | $311.17 |
+----+-----+------------------+----------+-----------------+-----------+
Нашел идентификатор div с помощью инструментов Chrome dev:
<table class = "table floating-header summary-table
js-summary-table dataTable no-footer"
id = "currencies-all" <!-- this is what I need -->
style = "font-size: 14px; width: 100%;" role = "grid">
Сейчас пытаюсь получить данные с другого URL, но безуспешно. URL-адрес:
https://coinmarketcap.com/currencies/bitcoin/исторические-данные/?start=20130428&end=20190410
Таблица находится в этом div:
<div id = "historical-data" class = "tab-pane active">
Мой код таков:
In[2]:
import numpy as np
import pandas as pd
from tabulate import tabulate
URL = "https://coinmarketcap.com/currencies/bitcoin/historical-data/?start=20130428&end=20190410"
df_in_list = pd.read_html(URL, attrs = {'id': 'historical-data'})
# df_in_list has the df in element 0
df_raw = df_in_list[0]
df = df_in_list[0]
df = df[['#', 'Name', 'Symbol', 'Market Cap', 'Price' ]]
print(tabulate(df.head(), headers='keys', tablefmt='psql'))
Out[2]:
ValueError: No tables found
Что мне не хватает?
Очевидно, что в этом интересующем меня div нет тега table
:
<div id = "historical-data" class = "tab-pane active">
Это причина ошибки?
Если да, то как еще я могу получить данные, находящиеся в этом div?
Я знаю, что у coinmarketcap.com есть API, но я предпочитаю получать данные с их сайта.
Да, у вас неправильный class
за столом.
Если вы измените df_in_list
на df_in_list = pd.read_html(URL, attrs = {'class': 'table'})
, это должно сработать.
Вам также придется изменить часть df = df[['#', 'Name', 'Symbol', 'Market Cap', 'Price' ]]
, так как этих столбцов нет в новой таблице, которую вы очищаете.
Превосходно! Спасибо.