Используя BeautifulSoup4, я могу сузить таблицу до мелочей и хочу извлечь из нее две вещи: 1) текст (что я могу сделать) 2) значение класса (что я не могу сделать).
Фрагмент html Я принимаю:
<table id="allergen_list">
<thead>
<tr>
<th style="text-align: left;">Date</th>
<th style="text-align: right;">Fungus</th>
<th style="text-align: right;">Mountain<br />Cedar</th>
</tr>
</thead>
<tbody>
<tr><td style="text-align: left;">Jan 1</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td></tr>
<tr><td style="text-align: left;">Jan 2</td><td style="text-align: right;" class="pollen_color_low">3,410</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td></tr>
<tr><td style="text-align: left;">Jan 3</td><td style="text-align: right;" class="pollen_color_low">3,023</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td></tr>
<tr><td style="text-align: left;">Jan 4</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td></tr>
<tr><td style="text-align: left;">Jan 5</td><td style="text-align: right;" class="pollen_color_low">3,720</td><td style="text-align: right;" class="pollen_color_moderate">31</td></tr>
<tr><td style="text-align: left;">Jan 6</td><td style="text-align: right;" class="pollen_color_low">4,108</td><td style="text-align: right;" class="pollen_color_moderate">16</td></tr>
<tr><td style="text-align: left;">Jan 7</td><td style="text-align: right;" class="pollen_color_low">4,496</td><td style="text-align: right;" class="pollen_color_moderate">16</td></tr>
<tr><td style="text-align: left;">Jan 8</td><td style="text-align: right;" class="pollen_color_low">3,953</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td></tr>
<tr><td style="text-align: left;">Jan 9</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td><td style="text-align: right; color: #999999;" class="pollen_color_absent">0</td></tr>
</tbody>
</table>
Фрагмент кода:
soup = BeautifulSoup(page, 'lxml')
...
for row in the_table.find_all('tr'):
pollen = row.find_all('th')
print(pollen)
cells = row.find_all('td')
print(cells)
num=len(cells) #or find in th..
if num>0:
for i in range(0,num):
print(cells[i].find(text=True))
print(cells[i].find("class", re.compile("^pollen_color")))
print("-*-*-*")
Результат:
[<th style="text-align: left;">Date</th>, <th style="text-align: right;">Fungus</th>, <th style="text-align: right;">Mountain<br/>Cedar</th>]
[]
-*-*-*
[]
[<td style="text-align: left;">Jan 1</td>, <td class="pollen_color_absent" style="text-align: right; color: #999999;">0</td>, <td class="pollen_color_absent" style="text-align: right; color: #999999;">0</td>]
Jan 1
None
0
None
0
None
-*-*-*
[]
[<td style="text-align: left;">Jan 2</td>, <td class="pollen_color_low" style="text-align: right;">3,410</td>, <td class="pollen_color_absent" style="text-align: right; color: #999999;">0</td>]
Jan 2
None
3,410
None
0
None
-*-*-*
Нет - это то место, где я ожидаю / надеюсь увидеть "pollen_color_absent" и др. c. Как я могу извлечь класс из *
Помощь / наставничество волшебника так высоко ценится!