Что работает
Мне удалось получить данные из таблицы 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:
<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/historical-data/?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?
Редактировать 2
Я знаю, что у coinmarketcap.com есть API, но я предпочитаю получать данные с их сайта.