Извлечение текста под-тега с помощью BeautfulSoup - PullRequest
0 голосов
/ 09 июля 2019

У меня проблема с кодом, который я запускаю.Это для извлечения, и в конечном итоге создать список имен, которые находятся на веб-сайте.Это для захвата имени в следующем:

<th class="left " data-append-csv="David-Cornell" data-stat="player" scope="row"><a href="/en/players/0c9aad01/David-Cornell">David Cornell</a></th>

Теперь я уже создал код для захвата всех этих экземпляров, однако, даже когда я использую экземпляры find в коде для захвата следующего тега, яЯ получаю ошибки по этому вопросу.Я подозреваю, что у меня есть способ просто разобрать полученный текст, но это будет довольно много для целей, особенно когда есть много разных страниц.

from bs4 import BeautifulSoup as bsoup
import requests as reqs

page = reqs.get("https://fbref.com/en/squads/986a26c1/Northampton-Town")
parsepage = bsoup(page.content, 'html.parser')

findplayers = parsepage.find_all('th',attrs={"data-stat":"player"}).find_next('a')
print(findplayers)

Так что я не могуна всю жизнь перехватите следующий тег - я попробовал серию итераций, и ошибка, которую я получаю при запуске этого:».Вы, вероятно, рассматриваете список предметов как отдельный предмет.Вы вызывали find_all (), когда намеревались вызвать find ()?

Как мне решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Вы можете изменить свой селектор и с помощью select сделать следующее

players = [item.text for item in parsepage.select('#stats_player tbody th')]

Все имена в th тела таблицы (tbody) с идентификатором stats_player

Или альтернативно

#stats_player th.left a

Это немного быстрее, чем альтернативы, которые используют такие атрибуты, как:

#stats_player [data-append-csv]
0 голосов
/ 10 июля 2019

find_all дает список со многими элементами, и вы должны использовать find_next с каждым элементом отдельно.Вы должны использовать for -loop

from bs4 import BeautifulSoup as bsoup
import requests as reqs

page = reqs.get("https://fbref.com/en/squads/986a26c1/Northampton-Town")
parsepage = bsoup(page.content, 'html.parser')

finndplayers = parsepage.find_all('th',attrs={"data-stat":"player"})

for item in findplayers:
    print( item.find_next('a') )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...