Я не могу очистить данные таблицы с нескольких 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")
Другие вопросы по тегам