我有这个HTML代码:
<tr class="even">
<td style="background: #8FB9B0; color: #8FB9B0;">0 </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>
这是第二个带有'even'类的tr。我想从这里提取第二个td aka Plupp和第三个又名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
答案 0 :(得分:2)
您的问题始于:
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.
答案 1 :(得分:1)
第一行是返回一个数组,其中所有tr标签的类属性为“even”。 [1]数组索引选择器表示选择数组中的第二个tr标记(记住数组从0开始)。
此时tr对象不是数组或任何类型的集合,你会使用括号,它是一个漂亮的汤标记对象。错误是说[2]不是对tr对象执行的有效操作。