Python Selenium: извлечение динамических c таблиц из вложенных классов - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь получить данные из двух таблиц, данные которых обновляются каждые 0.5 секунд, таблица присутствует в структуре вложенных классов. Я использовал Selenium driver.find_element_by_xpath и пытался получить данные с помощью последовательности div[contains(@class,one)]/div[contains(@class,two)]..., но тщетно.

Я пробовал другие доступные методы и искал другие ресурсы, но не смог подобраться ближе.

Любой ведет! Вот код HTML:

<body>
<div class="one"> 
    <div class="two">
        <div class="three">

            <!--- First table -->

            <table class="Jan">
                <thread>...</thread>
                <tbody>
                    <tr>
                        <td class='cost'>100 </td>
                    </tr>
                    <tr>
                        <td class='cost'>86 </td>
                    </tr>
                    .
                    .
                    .
                    <tr>
                        <td class='cost'>56 </td>
                    </tr>           
                </tbody>
                <tfoot>...</tfoot>
            </table>

            <!--- Second table -->

            <table class="Feb">
                <thread>...</thread>
                <tbody>
                    <tr>
                        <td class='cost'>-856 </td>
                    </tr>
                    <tr>
                        <td class='cost'>-8986 </td>
                    </tr>
                    .
                    .
                    .
                    <tr>
                        <td class='cost'>-9856 </td>
                    </tr>           
                </tbody>
                <tfoot>...</tfoot>
            </table>
        </div>
    </div>
</div>

1 Ответ

1 голос
/ 09 апреля 2020

Вы можете создать список имен классов, как этот, и затем выполнить итерацию, чтобы найти количество строк таблицы, а затем получить текст.

listclass=['Jan','Feb']

Код :

listclass=['Jan','Feb']
for item in listclass:
    tablerows=driver.find_elements_by_xpath("//table[@class='"+ item + "']/tbody/tr")
    data=[row.get_attribute("textContent") for row in tablerows]
    print(data)

Вывод в виде списка:

['100', '86', '56']
['-856', '-8986', '-9856']

Другой вариант, который вы можете использовать pandas и read_html() и загружать данные в dataframe.

Код :

driver.get("url here")
time.sleep(3)
page=driver.page_source
dfs=pd.read_html(page)

for df in dfs:
    print(df.T)

Консольный выход:

     0   1   2
0  100  86  56
     0     1     2
0 -856 -8986 -9856
...