Используя красивый суп, но не в состоянии получить доступ к определенной информации - PullRequest
0 голосов
/ 27 июня 2018

В настоящее время я пишу программу очистки данных, чтобы получить хоккейную статистику. На странице, с которой я получаю информацию, есть некоторые статистические данные, которые доступны только в том случае, если вы нажмете кнопку javascript, но когда я произвожу предварительный расчет супа, я вижу, что все данные находятся в переменной soup . Это пример материала, к которому я пытаюсь получить доступ (это копия, вставленная из отпечатка (супа))

<tr class="ALL5v5 hidden" ><th scope="row" class="left " data-append-csv="bozakty01" data-stat="player" csk="Bozak,Tyler" ><a href="/players/b/bozakty01.html">Tyler Bozak</a></th><td class="right " data-stat="Cevents" >0</td><td class="right " data-stat="on_Cevents" >4</td><td class="right " data-stat="on_opp_Cevents" >5</td><td class="right " data-stat="corsi_for" >44.4</td><td class="right " data-stat="corsi_rel" >-2.5</td><td class="right " data-stat="zs_off" >2</td><td class="right " data-stat="zs_def" >0</td><td class="right " data-stat="ozs_pct" >100.0</td><td class="right " data-stat="hits" >2</td><td class="right " data-stat="blocks" >0</td></tr>
<tr class="CL5v5 hidden" ><th scope="row" class="left " data-append-csv="bozakty01" data-stat="player" csk="Bozak,Tyler" ><a href="/players/b/bozakty01.html">Tyler Bozak</a></th><td class="right " data-stat="Cevents" >0</td><td class="right " data-stat="on_Cevents" >2</td><td class="right " data-stat="on_opp_Cevents" >4</td><td class="right " data-stat="corsi_for" >33.3</td><td class="right " data-stat="corsi_rel" >-10.7</td><td class="right " data-stat="zs_off" >0</td><td class="right " data-stat="zs_def" >0</td><td class="right " data-stat="ozs_pct" ></td><td class="right " data-stat="hits" >2</td><td class="right " data-stat="blocks" >0</td></tr>

Для доступа к данным, которые я пробовал

soup.find_all('tr',{'data-stat': "on_Cevents"})
soup.find_all("tr", class_="ALL5v5 hidden")
soup.find_all({'data-stat': "Cevents"})
soup.find_all('td',{'data-stat': "Cevents"})

Ни один из них не имеет доступа к информации, даже если она содержится в переменной soup .

Я не понимаю, в чем проблема. Я использую следующую команду

players = soup.find_all('td', {'data-stat': "player"})

для доступа к информации об игроке, и это прекрасно работает. Но я не могу получить доступ к информации, указанной выше.

1 Ответ

0 голосов
/ 27 июня 2018

Я думаю, у вас есть проблемы в другом разделе. Пожалуйста, проверьте вашу конфигурацию снова. Или это результат другой части структуры html, которую вы нам не показали.

Вот сценарий, который я сделал.

from bs4 import BeautifulSoup

html = '<tr class="ALL5v5 hidden" ><th scope="row" class="left " data-append-csv="bozakty01" data-stat="player" csk="Bozak,Tyler" ><a href="/players/b/bozakty01.html">Tyler Bozak</a></th><td class="right " data-stat="Cevents" >0</td><td class="right " data-stat="on_Cevents" >4</td><td class="right " data-stat="on_opp_Cevents" >5</td><td class="right " data-stat="corsi_for" >44.4</td><td class="right " data-stat="corsi_rel" >-2.5</td><td class="right " data-stat="zs_off" >2</td><td class="right " data-stat="zs_def" >0</td><td class="right " data-stat="ozs_pct" >100.0</td><td class="right " data-stat="hits" >2</td><td class="right " data-stat="blocks" >0</td></tr><tr class="CL5v5 hidden" ><th scope="row" class="left " data-append-csv="bozakty01" data-stat="player" csk="Bozak,Tyler" ><a href="/players/b/bozakty01.html">Tyler Bozak</a></th><td class="right " data-stat="Cevents" >0</td><td class="right " data-stat="on_Cevents" >2</td><td class="right " data-stat="on_opp_Cevents" >4</td><td class="right " data-stat="corsi_for" >33.3</td><td class="right " data-stat="corsi_rel" >-10.7</td><td class="right " data-stat="zs_off" >0</td><td class="right " data-stat="zs_def" >0</td><td class="right " data-stat="ozs_pct" ></td><td class="right " data-stat="hits" >2</td><td class="right " data-stat="blocks" >0</td></tr>'

soup = BeautifulSoup(html, "html.parser")

# print(soup)

print(soup.find_all('th', {'data-stat': "player"})) # I think 'th' is correct, not 'td'
print(soup.find_all('tr',{'data-stat': "on_Cevents"}))
print(soup.find_all("tr", class_="ALL5v5 hidden"))
print(soup.find_all({'data-stat': "Cevents"}))
print(soup.find_all('td',{'data-stat': "Cevents"}))

А вот и результат. Я могу получить доступ к данным с помощью некоторого кода, который вы пробовали.

[<th class="left " csk="Bozak,Tyler" data-append-csv="bozakty01" data-stat="player" scope="row"><a href="/players/b/bozakty01.html">Tyler Bozak</a></th>, <th class="left " csk="Bozak,Tyler" data-append-csv="bozakty01" data-stat="player" scope="row"><a href="/players/b/bozakty01.html">Tyler Bozak</a></th>]
[]
[<tr class="ALL5v5 hidden"><th class="left " csk="Bozak,Tyler" data-append-csv="bozakty01" data-stat="player" scope="row"><a href="/players/b/bozakty01.html">Tyler Bozak</a></th><td class="right " data-stat="Cevents">0</td><td class="right " data-stat="on_Cevents">4</td><td class="right " data-stat="on_opp_Cevents">5</td><td class="right " data-stat="corsi_for">44.4</td><td class="right " data-stat="corsi_rel">-2.5</td><td class="right " data-stat="zs_off">2</td><td class="right " data-stat="zs_def">0</td><td class="right " data-stat="ozs_pct">100.0</td><td class="right " data-stat="hits">2</td><td class="right " data-stat="blocks">0</td></tr>]
[]
[<td class="right " data-stat="Cevents">0</td>, <td class="right " data-stat="Cevents">0</td>]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...