Разбор вложенных элементов td и colspan в таблице HTML с селеном (Python) - PullRequest
0 голосов
/ 24 марта 2020

Вот фиктивная версия таблицы HTML, которую я собираюсь проанализировать. Я хотел бы получить ВСЕ данные в элементах TD в формате

«Название продукта»: «Игрушечный грузовик»,

«Количество колес»: «4»

<tbody>
    <tr>
        <td colspan="2" rowspan="1" ><b>Product detail</b>
            <div>
            <i></i>
            </div>
        </td>
    </tr>
    <tr>
        <td colspan="1" rowspan="1" style="vertical-align: top;width: 200px"><b>Product name:</b></td>
        <td colspan="1" rowspan="1" style="vertical-align: top;width: 700px">Toy truck</td>
    </tr>
    <tr>
        <td colspan="1" rowspan="1" style="vertical-align: top;width: 200px"><b>Wheels counts:</b></td>
        <td colspan="1" rowspan="1" style="vertical-align: top;width: 700px">4</td>
    </tr>
    <tr>
        <td colspan="2" rowspan="1"><b>Product Information</b>
            <div style="float:right;margin-right:5px">
            <i></i>
            </div>
        </td>
    </tr>
    <tr>
        <td colspan="1" rowspan="1" style="vertical-align: top;width: 200px"><b>Build date:</b></td>
        <td colspan="1" rowspan="1" style="vertical-align: top;width: 700px">2018-03-15</td>
    </tr>
    <tr>
        <td colspan="1" rowspan="1" style="vertical-align: top;width: 200px"><b>Location:</b></td>
        <td colspan="1" rowspan="1" style="vertical-align: top;width: 700px">Tennessee</td>
    </tr>
</tbody>

Я могу получить доступ к таблице с помощью этого кода и вытащить несколько элементов. Но, например, это вытягивает первый элемент td (название продукта, количество колес и т. Д. c), но не соответствующие им значения (2-й элемент TD). Кроме того, все, что находится за «Информацией о продукте», не относится к этому для l oop. Что мне здесь не хватает?

wait = WebDriverWait(self.driver, 30)
table_id = wait.until(EC.element_to_be_clickable((By.TAG_NAME,"tbody")))
rows = table_id.find_elements(By.TAG_NAME, "tr")
for row in rows:
    col = row.find_elements(By.TAG_NAME, "td")
    for c in col:
        print (c.text)
    try:
        col2 = col.find_elements(By.TAG_NAME, "td")
        for c in col2:
            print (c.text)
    except:
        pass

Даже если я просто просто экспортирую HTML таблицы, те же элементы не идентифицируются:

import pandas as pd
tabletext = table_id.get_attribute('outerHTML')
print (tabletext)
df  = pd.read_html(tabletext)
print (df)
...