首页 > 解决方案 > 查找包含特定文本的 td 的下一个兄弟并将其存储在变量中

问题描述

我有这张桌子,我试图用 Python/Beautiful Soup 来刮。

我也有这个代码:

desc_seven = page_soup.find.nextSibling('strong', text='Description 7')
print(desc_seven.text.strip())

我要做的是找到文本“描述 7”,然后转到它旁边的文本并将其存储在一个变量中,这样我就可以轻松地找到print它。

如果我这样做,输出应该是“HHH”print(desc_seven.text.strip())

我的代码不起作用,说没有属性“nextSibling”。此外,是否可以在不使用任何 (for) 循环的情况下执行此操作,因为我将捕获几个td并将其单独存储在一个变量中。

<table>
  <tr>
    <td><strong>Description 1</strong></td>
    <td>AAA</td>
    <td><strong>Description 11</strong></td>
    <td>LLL</td>
  </tr>
  <tr>
    <td><strong>Description 2</strong></td>
    <td>BBB</td>
    <td><strong>Description 12</strong></td>
    <td>MMM</td>
  </tr>
  <tr>
    <td><strong>Description 3</strong></td>
    <td>CCC</td>
    <td><strong>Description 13</strong></td>
    <td>NNN</td>
  </tr>
  <tr>
    <td><strong>Description 4</strong></td>
    <td>EEE</td>
    <td><strong>Description 14</strong></td>
    <td>OOO</td>
  </tr>
  <tr>
    <td><strong>Description 5</strong></td>
    <td>FFF</td>
    <td><strong>Description 15</strong></td>
    <td>PPP</td>
  </tr>
  <tr>
    <td><strong>Description 6</strong></td>
    <td>GGG</td>
    <td><strong>Description 16</strong></td>
    <td>QQQ</td>
  </tr>
  <tr>
    <td><strong>Description 7</strong></td>
    <td>HHH</td>
    <td><strong>Description 17</strong></td>
    <td>RRR</td>
  </tr>
  <tr>
    <td><strong>Description 8</strong></td>
    <td>III</td>
    <td><strong>Description 18</strong></td>
    <td>SSS</td>
  </tr>
  <tr>
    <td><strong>Description 9</strong></td>
    <td>JJJ</td>
    <td><strong>Description 19</strong></td>
    <td>TTT</td>
  </tr>
  <tr>
    <td><strong>Description 10</strong></td>
    <td>KKK</td>
    <td><strong>Description 20</strong></td>
    <td>UUU</td>
  </tr>
</table>

感谢您对此的帮助。谢谢!

标签: pythonbeautifulsoup

解决方案


您可以做的是find_next()在找到“强”元素后使用:

soup = BeautifulSoup(html, 'html.parser')
strong = soup.find('strong', text='Description 7')
desc_seven = strong.find_next('td')
print(desc_seven.text.strip())

输出:

HHH

您可以在一行中完成:

desc_seven =  soup.find('strong', text='Description 7').findNext('td').get_text(strip=True)
print(desc_seven)

输出:

HHH


推荐阅读