Index error при использовании Beautiful Soup
При выполнении первой части кода, - все работает. При выполнении второй части кода, тоже се работает. Но при выполнении всего кода возникает IndexError, код выполняется и появляется ошибка
Index error: list index out of range в строке namesBanks = soup.find("div", ....
Подскажите пожалуйста, как избежать ошибки.
Код:
url = 'https://canadianpreferredshares.ca/'
response = requests.get(url)
response.text
soup = BeautifulSoup(response.text, "lxml")
dataTest = []
dataAll = []
dataNames = []
dataLink = []
data = []
for a in range(0, 3): #исправить на 53
namesBanks = soup.find("div", class_="et_pb_code_inner").findAll("td", class_="issuerLinks")[a].text
linksBanks = soup.find("div", class_="et_pb_code_inner").findAll("a")[a].get('href')
#dataTest.append([namesBanks, linksBanks])
# url2 = linksBanks
# response = requests.get(url2)
# response.text
# soup = BeautifulSoup(response.text, "lxml")
dataNames.append([namesBanks])
dataLink.append([linksBanks])
string = ''
for o in dataLink:
string += o[0]
for k in dataLink:
url2 = string
response = requests.get(url2)
response.text
soup = BeautifulSoup(response.text, "lxml")
table = soup.find('table', class_='sortable sticky')
for employee_data in table.find_all('tbody'):
rows = employee_data.find_all('tr')
for row in rows:
symbols = row.findAll("td")[0].text
prices = row.findAll("td")[1].text
high = row.findAll("td")[2].text
low = row.findAll("td")[3].text
fixedRateBase = row.findAll("td")[4].text
current = row.findAll("td")[5].text
name = row.findAll("td")[6].text
nameLinks = row.find("a").get('href')
data.append([symbols, prices, high, low, fixedRateBase, current, name, nameLinks])
data.insert(0, namesBanks)
print(data)
Ответы (1 шт):
Как я понимаю в цикле вы указываете диапазоном от 0 до 3, предполагая что у вас есть 100 банков на сайте, потом после каждой иттерации вы получаете временную переменную "a" и хотите найти этот индекс в массиве, но если у вас на странице всего 50 банков, то и массив соберётся из 50 индексов, поэтому при получении 51 индекса вы получаете ошибку, в вашем случае намного лучше будет сначала собрать все записи и потом уже по ним производить поиск
banks_list = soup.find("div",class_="et_pb_code_inner").findAll('td',class_="issuerLinks")
for bank in banks_list:
dataNames.append(bank.text)
dataLink.append(bank.find('a').get('href'))