#python #pandas #dataframe #beautifulsoup
#python #pandas #фрейм данных #beautifulsoup
Вопрос:
Что работает
Мне удалось получить данные из таблицы 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 tools:
<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=20130428amp;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=20130428amp;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
Чего мне не хватает?
Редактировать
Очевидно table
, что в этом интересующем меня div нет тега:
<div id="historical-data" class="tab-pane active">
Это причина ошибки?
Если да, то как еще я могу получить данные, которые находятся внутри этого div?
Редактировать 2
Я знаю, что coinmarketcap.com имеет API, но я предпочитаю получать данные с их веб-сайта.
Ответ №1:
Да, у вас неверно class
для таблицы.
Если вы измените df_in_list
df_in_list = pd.read_html(URL, attrs = {'class': 'table'})
его, он должен работать.
Вам также придется изменить df = df[['#', 'Name', 'Symbol', 'Market Cap', 'Price' ]]
часть, поскольку этих столбцов нет в новой таблице, которую вы очищаете.
Комментарии:
1. Отлично! Спасибо.