Извлечь все данные из динамической таблицы HTML - PullRequest
0 голосов
/ 05 июня 2018

Вот моя проблема:

Для приложения для написания Excel я извлекаю данные из таблицы HTML.У меня есть веб-сайт, который содержит таблицу, я могу просмотреть ее и извлечь данные.

НО

, поскольку таблица показывает только 20 строк, я могу извлечь только первые 20 строк, а не всю таблицу (номера строк довольно случайны).

Примечаниечто HTML-таблица сбрасывает его td / ID как row0 на row19 каждый раз, когда вы прокручиваете страницу (вероятно, обычно, но я не HTML-профессионал: D)

Я понятия не имею, как мне пройти всю таблицубез дубликатов данных строк.

Если у кого-то есть идея, добро пожаловать!

Edit 1:

вот HTML (я отфильтровал его дляесть только col1, как мне нужно для моего извлечения)

`https://jsfiddle.net/yfb429Lo/13/`

Действительно, справа от таблицы есть вкладка прокрутки, как на скриншоте здесь:

Table_screenshot

Когда я прокручиваю таблицу вниз 2 раза, HTML-код сам обновляется, чтобы выглядеть следующим образом:

==> row2 становится row0, row3 становится row1, ...

У меня есть что-то вроде 100 таблиц для извлечения, и я не могу заранее знать длину таблицы.

Спасибо всем,

Арно

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

После многих испытаний вот ответ:

 try:
        last_row = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]")
        last_row_old = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
        last_row.click()
        last_row.send_keys(Keys.PAGE_DOWN)
        time.sleep(2)
        last_row_new = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text

        while (last_row_new == last_row_old) is False:
            table = driver.find_element_by_xpath("//*[contains(@id, '--TilesTable-table')]/tbody")
            td_list = table.find_elements_by_xpath(".//tr/*[contains(@id, '-col1')]")
            for td in td_list:
                tile_title = td.text
                sh_tile = wb["Tuiles"]
                sh_tile.append([catalog, tile_title])
            last_row = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]")
            last_row_old = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
            last_row.click()
            last_row.send_keys(Keys.PAGE_DOWN)
            time.sleep(0.5)
            last_row_new = driver.find_element_by_xpath(".//tr/*[contains(@id, '--TilesTable-rows-row19-col1')]").text
    except selenium.common.exceptions.NoSuchElementException:
        pass
0 голосов
/ 05 июня 2018

Извлечение строк с использованием xpath вместо td / ID, поскольку они не являются постоянными.

Нажмите кнопку «Следующая страница», затем извлеките строки снова, пока нажатие кнопки «Следующая страница» не вызовет NotFoundException (зависит от того, не отображается ли кнопка на последней странице).Если вы предоставите HTML или ссылку на сайт, вы получите лучший ответ.

...