首页 > 解决方案 > BeautifulSoup 如何索引标签对象

问题描述

我有这个 html 代码:

<tr class="even">
  <td style="background: #8FB9B0; color: #8FB9B0;">0&#160;</td>
  <td>Plupp</td>
  <td class="right">RIFLEMAN</td>
  <td class="right">139</td>
  <td class="right">6</td>
  <td class="right">30</td>
  <td class="right" title="Packet loss: ">64</td>
  <td class="center">No</td>
  <td class="center">No</td>
  <td class="center">Yes</td>

这是第二个带有“偶数”类的 tr。我想从这里提取第二个 td aka Plupp 和第三个 aka RIFLEMAN

请帮助我理解我做错了什么,这是我的代码:

tr = soup.find_all('tr', class_='even')[1]
a = tr[2].find('td')

我收到此错误:

  File "test.py", line 45, in <module>
    a = tr[2].find('td')
  File "C:\Python27\lib\site-packages\bs4\element.py", line 1011, in __getitem__
    return self.attrs[key]
KeyError: 2

标签: pythonobjectindexingbeautifulsouptags

解决方案


你的问题开始于:

tr = soup.find_all('tr', class_='even')[1]

[1]在行尾表示返回的东西是单个标签而不是标签列表,而是在您的下一行:

a = tr[2].find('td')

您尝试对没有索引的对象进行索引,我建议您实现目标的方法是将这一行替换为:

tds = tr.find_all("td") # returns a list of td's within the tr
a = tds[2] # accesses RIFLEMAN
b = tds[1] # accesses Pupp.

推荐阅读