用BeautifulSoup索引TD / TR

时间:2013-01-29 18:58:22

标签: python html indexing beautifulsoup

HTML代码段:

<tr>
   <td class="faux_th">Unfinished Carport</td>
   <td>336</td>
   <td>0</td>
   <td>67</td>
</tr>
<tr class="alt">
   <td class="faux_th">Finished Encl Porch</td>
   <td>96</td>
   <td>0</td>
   <td>58</td>
</tr>
<tr>
   <td class="faux_th">Finished Open Porch</td>
   <td>60</td>
   <td>0</td>
   <td>18</td>
</tr>
<tr class="alt">
   <td class="faux_th">Base Area</td>
   <td>996</td>
   <td>996</td>
   <td>996</td>
</tr>
<tr>
   <td class="faux_th">Total</td>
   <td>1488</td> ##this is the value I need each time
   <td>996</td>
   <td>1139</td>
</tr>

使用BS4的Python:

houseArea = bs.find('table', {'id': 'ctl00_cphBody_repeaterBuilding_ctl00_gridBuildingArea'})
houseRows = houseArea.findAll('tr')[3]
houseArea1 = str(houseArea)
houseRows = houseRows.findAll('td')[1]
houseRows = str(houseRows)
houseRows = houseRows.replace('<td>', '')
houseRows = houseRows.replace('</td>', '')

这对我试过的例子非常有用。当我使用上面包含5个TR标签的片段时,很明显它会中断。我想要完成的是从TR标记为“Total”的第二个TD。我已经尝试过各种各样的方式,但我无法通过某种方式来处理这个问题。有没有办法从反向索引它?如果是这样,“Total”TR的位置总是最后的。我的最后一个选择是使用正则表达式匹配HTML,但即使从那里我不知道如何拉取我需要的结果。关于如何解决这个问题的任何建议都会很棒。

1 个答案:

答案 0 :(得分:0)

当然有,使用[-1]作为索引:

lastRow = houseRows[-1]

从列表的当前长度中减去负索引,因此索引-2是一个但最后一个条目,等等。