Очистка данных проигрывателя с помощью BeautifulSoup

#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)