Я не могу очистить данные таблицы с нескольких URL-адресов, используя цикл for и BeautifulSoup
Я пытаюсь очистить данные таблицы от нескольких URL. Таблица, которую я ищу, специфична, и я проиндексировал ее при использовании.find_all с BeautifulSoup. Например, когда я выполняю скрипт на одном URL-адресе, он работает нормально и возвращает таблицу, которую я ищу. Проблема возникает, когда я использую цикл for, чтобы очистить таблицы от нескольких URL-адресов и добавить их в один фрейм данных.
new_table=pd.DataFrame(columns=range(0,10), index=[0])
k=0
for k in range(0, 11200):
response=requests.get(urls[k])
htmls=response.text
soup=BeautifulSoup(htmls, 'html.parser')
table=soup.find_all("table")[4]
row_marker=0
rows=table.find_all("tr")
for row in rows:
column_marker=0
columns=row.find_all("td")
for column in columns:
new_table.iat[row_marker, column_marker]=column.get_text()
column_marker += 1
row_marker += 1
k += 1
new_table
Ошибка:
IndexError Traceback (most recent call last)
<ipython-input-132-13c30de3ad5a> in <module>()
5 soup=BeautifulSoup(htmls, 'html.parser')
6
----> 7 table=soup.find_all("table")[4]
8 row_marker=0
9 rows=table.find_all("tr")
IndexError: list index out of range
1 ответ
Не устанавливайте индексную таблицу непосредственно, добавьте проверку перед
table = soup.find_all("table")
if len(table) < 5:
print('no table[4], skip')
continue
row_marker = 0
rows = table[4].find_all("tr")