Ошибка запускается из-за 2-го pd.read_html(url)
в строке if pd.read_html(url)[0].empty:
.Первый HTTPError
обрабатывается try/except
, во второй раз вы звоните по тому же URL-адресу, который не удался раньше, без защиты.
Во-вторых, из-за break
errors
будет только 1 запись.Я не уверен, что вы хотите сохранить все вышедшие из строя ULR или только те, которые находятся в цикле.
Попробуйте.
import datetime
import pandas as pd
from urllib.error import HTTPError
start = datetime.datetime.strptime("19-09-2016", "%d-%m-%Y")
end = datetime.datetime.strptime("31-12-2017", "%d-%m-%Y")
date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end - start).days)]
dates_list = []
for date in date_generated:
txt = str(str(date.day) + '.' + str(date.month) + '.' + str(date.year))
dates_list.append(txt)
ndf = pd.DataFrame() # create empty ndf
for i in range(0, len(dates_list)):
allURL = 'https://www.uzse.uz/trade1_results?date=' + dates_list[i] + '&locale=en&mkt_id=ALL&page=%d'
errors = []
for k in range(1, 100):
url = allURL % k
try:
chunk = pd.read_html(url)[0]
chunk['Date'] = dates_list[i] # Date is positioned at last position, let's fix that
cols = chunk.columns.tolist() # get a list of all the columns
cols = cols[-1:] + cols[:-1] # rearrange the columns, move the last element (Date) to the first position
chunk = chunk[cols] # reorder the dataframe
ndf = pd.concat([ndf, chunk])
except HTTPError:
errors.append(url)
print(errors)
print(ndf)