我正在尝试在表内抓取一些详细信息行,但是我不知道如何正确访问信息。这是html:
<tr class="even">
<td style="background: #F5645C; color: #F5645C;">1 </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 </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 </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 </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 </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 </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 </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_next_sibling'
答案 0 :(得分:1)
data = BeautifulSoup(html)
for tr in data.find_all('tr'):
td = tr.find_all('td')
print(td[1].text)
现在,我认为您可以更进一步。
答案 1 :(得分:1)
使用.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
答案 2 :(得分:1)
您可以使用CSS选择器来选择所有包含属性<td>
和字符串style
的{{1}}标签,然后应用方法color: #F5645C
:
find_next()
此打印:
for td in soup.select('td[style*="color: #F5645C"]'):
print(td.find_next('td').text)
答案 3 :(得分:0)
使用可以使用find_all
和style
属性的过滤器:
bs = BeautifulSoup(htmlcontent)
bs.find_all('td', attrs={'style':'background-color: #F5645C, color: #F5645C'})