Вот фиктивная версия таблицы 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)