刮削台,带漂亮的SOUP4

2024-10-02 10:29:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在一个表中刮取一些细节行,但我不知道如何正确地访问这些信息。以下是html:

<tr class="even">
  <td style="background: #F5645C; color: #F5645C;">1&#160;</td>
  <td>Michael</td>
  <td class="right">57</td>
  <td class="right">0</td>
  <td class="right">5</td>
</tr>
<tr class="odd">
  <td style="background: #8FB9B0; color: #8FB9B0;">1&#160;</td>
  <td>Clara</td>
  <td class="right">48</td>
  <td class="right">0</td>
  <td class="right">5</td>
</tr>
<tr class="even">
  <td style="background: #F5645C; color: #F5645C;">1&#160;</td>
  <td>Lisa</td>
  <td class="right">44</td>
  <td class="right">2</td>
  <td class="right">5</td>
</tr>
<tr class="odd">
  <td style="background: #8FB9B0; color: #8FB9B0;">0&#160;</td>
  <td>Joe</td>
  <td class="right">43</td>
  <td class="right">0</td>
  <td class="right">13</td>
</tr>
<tr class="even">
  <td style="background: #F5645C; color: #F5645C;">1&#160;</td>
  <td>John</td>
  <td class="right">38</td>
  <td class="right">3</td>
  <td class="right">4</td>
</tr>
<tr class="odd">
  <td style="background: #F5645C; color: #F5645C;">1&#160;</td>
  <td>Francesca</td>
  <td class="right">35</td>
  <td class="right">2</td>
  <td class="right">5</td>
</tr>
<tr class="even">
  <td style="background: #8FB9B0; color: #8FB9B0;">0&#160;</td>
  <td>Carlos</td>
  <td class="right">27</td>
  <td class="right">1</td>
  <td class="right">2</td>
</tr>

我试图获得的是下一个td上的文本,每个td后面都有颜色为F5645C的文本,但不幸的是我遇到了问题。 这就是我希望脚本返回的内容: 迈克尔 丽莎 约翰 弗朗西斯卡

以下是我目前拥有的代码:

table = soup.find('table')
table_rows = table.find_all('tr')

for tr in table_rows:
    td = tr.find('td', style='background: #F5645C; color: #F5645C;').find_next_sibling('td').get_text()
    print(td)

运行脚本时:AttributeError:“NoneType”对象没有“find\u next\u sibling”属性


Tags: 文本right脚本styletablefindtrclass
3条回答

使用.findNext("td").text

例如:

from bs4 import BeautifulSoup
soup = BeautifulSoup(html, "html.parser")
for tr in soup.find_all("tr"):
    print(tr.td.findNext("td").text)

输出:

Michael
Clara
Lisa
Joe
John
Francesca
Carlos
data = BeautifulSoup(html)
for tr in data.find_all('tr'):
    td = tr.find_all('td')
    print(td[1].text)

现在你可以更进一步了我想。。你知道吗

您可以使用CSS selector选择包含属性style和字符串color: #F5645C的所有<td>标记,然后应用方法find_next()

for td in soup.select('td[style*="color: #F5645C"]'):
  print(td.find_next('td').text)

这张照片:

Michael
Lisa
John
Francesca

相关问题 更多 >

    热门问题