Как мне использовать pd.read_html и перебирать множество разных URL-адресов и сохранять каждый набор dfs в главном списке dfs?

#python #pandas #web-scraping

#python #pandas #веб-очистка

Вопрос:

Мне было интересно, как извлекать тикеры из файла Excel, загружать кучу веб-сайтов и запускать pd.read_html на каждом веб-сайте, чтобы получить большой список dfs, содержащий таблицы каждой страницы?

Это мой список тикеров: https://docs.google.com/spreadsheets/d/16kdjtOlV1M_rDnM73lPi6ZcMvowQPmtjKu6bYTXK588/edit?usp=sharing

Это мой текущий код:

 from six.moves import urllib
import pandas as pd

df = pd.read_excel('C:/Users/Jacob/Downloads/CEF Tickers.xlsx', sheet_name='Sheet1')

tickers_list = df['Ticker'].tolist()

df_list = []

for ticker in tickers_list:
    df_list[ticker] = pd.read_html(f'https://www.cefconnect.com/fund/{ticker}', header=0)

print(df_list)
  

И затем, когда я это делаю, я получаю:

 TypeError: list indices must be integers or slices, not str
  

Спасибо за ваше время.

Комментарии:

1. ticker это не целое число, это строка. если вы хотите индексировать коллекцию значений с помощью строк, используйте словарь

Ответ №1:

 from six.moves import urllib
import pandas as pd

df = pd.read_excel('C:/Users/Jacob/Downloads/CEF Tickers.xlsx', sheet_name='Sheet1')

tickers_list = df['Ticker'].tolist()

df_list = []

for ticker in range(len(tickers_list)):
    df_list[ticker] = pd.read_html(f'https://www.cefconnect.com/fund/{ticker}', header=0)

print(df_list)
  

Ответ №2:

Это то, что я сделал.

 
df = pd.read_excel('C:/Users/Jacob/Downloads/CEF Tickers.xlsx', sheet_name='Sheet1')

tickers_list = df['Ticker'].tolist()
data = pd.DataFrame(columns=tickers_list)


for ticker in tickers_list:
    data[ticker] = pd.read_html(f'https://www.cefconnect.com/fund/{ticker}', header=0)


print(data)