Конкретные наскрести результат в НХЛ с помощью Python-Beautifulsoup


Я пытаюсь наскрести только общий счет для определенной команды. Я написал следующее:

import urllib.request
import re
from bs4 import BeautifulSoup

#url1 = "http://scores.nbcsports.com/nhl/scoreboard.asp"

## This works, however is using a set day for testing, will need url changed to url1 for current day scoreboard
url = "http://scores.nbcsports.com/nhl/scoreboard.asp?day=20141202"
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page)

allrows = soup.findAll('td')
userows = [t for t in allrows if t.findAll(text=re.compile('Vancouver'))]

print(userows)

Это возвращает:

[<td><table cellspacing="0"><tr class="shsTableTtlRow"><td class="shsNamD" colspan="1">Final</td>
<td class="shsTotD">1</td>
<td class="shsTotD">2</td>
<td class="shsTotD">3</td>
<td class="shsTotD">Tot</td>
</tr>
<tr>
<td class="shsNamD" nowrap=""><span class="shsLogo"><span class="shsNHLteam22sm_trans"></span></span><a href="/nhl/teamstats.asp?teamno=22&amp;type=stats">Vancouver</a></td>
<td class="shsTotD">1</td>
<td class="shsTotD">2</td>
<td class="shsTotD">1</td>
<td class="shsTotD">4</td>
</tr>
<tr>
<td class="shsNamD" nowrap=""><span class="shsLogo"><span class="shsNHLteam23sm_trans"></span></span><a href="/nhl/teamstats.asp?teamno=23&amp;type=stats">Washington</a></td>
<td class="shsTotD">0</td>
<td class="shsTotD">2</td>
<td class="shsTotD">1</td>
<td class="shsTotD">3</td>
</tr>
</table>
</td>, <td class="shsNamD" nowrap=""><span class="shsLogo"><span class="shsNHLteam22sm_trans"></span></span><a href="/nhl/teamstats.asp?teamno=22&amp;type=stats">Vancouver</a></td>]

Чего я никак не могу понять, так это 4 в <td class="shsTotD">4</td> от среднего блока. Если только возможно получить 1 2 1 4 я мог бы сравнить значения и всегда выбирать самое большое, но я даже не могу зайти так далеко. Заранее спасибо.

1 2

1 ответ:

Найдите тег, содержащий Vancouver, и получите следующие теги td с помощью find_next_siblings():

vancouver = soup.find('a', text='Vancouver')
for td in vancouver.parent.find_next_siblings('td', class_='shsTotD'):
    print(td.text)

Отпечатки пальцев:

1
2
1
4