#python #beautifulsoup
#python #beautifulsoup
Вопрос:
Я пытаюсь очистить футбольную статистику с помощью BeautifulSoup и пытаюсь получить имя игрока из тега «a», но безуспешно.
Вот мой текущий код:
from bs4 import BeautifulSoup
import requests
import numpy as np
import pandas as pd
url = 'https://www.pro-football-reference.com/years/2020/rushing.htm#rushing_and_receiving::rush_yds'
req = requests.get(url).text
soup = BeautifulSoup(req, 'lxml')
players = []
table = soup.find('table')
rows = table.find_all('tr')
for row in rows:
player = row.find_all('td', {'data-stat':'player'})
print(player)
Вот первые несколько примеров того, что возвращается:
[<td class="left" csk="Henry,Derrick" data-append-csv="HenrDe00" data-stat="player"><a href="/players/H/HenrDe00.htm">Derrick Henry </a>*</td>]
[<td class="left" csk="Cook,Dalvin" data-append-csv="CookDa01" data-stat="player"><a href="/players/C/CookDa01.htm">Dalvin Cook</a>*</td>]
[<td class="left" csk="Jacobs,Josh" data-append-csv="JacoJo01" data-stat="player"><a href="/players/J/JacoJo01.htm">Josh Jacobs</a>*</td>]
Как мне получить только текст, чтобы получить имя проигрывателя? Есть ли более простой способ сделать это, чем то, что я начал?
Это то, что я хотел бы:
Derrick Henry
Dalvin Cook
Josh Jacobs
Я пробовал следующее в своем цикле, но получал ошибки:
for row in rows:
player = row.find_all('td', {'data-stat':'player'}).text
print(player)
Спасибо!
Ответ №1:
В вашем цикле для получения имен find_all
возвращается a ResultSet
(который представляет собой a list
элементов, найденных с помощью селекторов). Вы хотите использовать find
вместо
for row in rows:
player = row.find('td', {'data-stat':'player'})
if player:
player = player.text
print(player)