Красивый суп возвращает только последнее значение таблицы

#python #web-scraping #beautifulsoup #html-table

#python #очистка веб-страниц #beautifulsoup #html-таблица

Вопрос:

Я пытаюсь очистить данные таблицы с этой страницы на веб-сайте статистики PGA. Я беру имя игрока, и код, похоже, работает, но он возвращает только последнее значение «Патрик Роджерс» с сайта. Что я здесь делаю не так?

Это html, который он захватывает.

Вот мой исходный код:

 #Get URL and Parse
url = 'https://www.pgatour.com/content/pgatour/stats/stat.02674.y2020.eon.t027.html'
results = requests.get(url)
soup = BeautifulSoup(results.text, 'html.parser')

#Find data
sg_ttg = soup.find('table', id = 'statsTable')

#Get data
for player in sg_ttg.find_all('tbody'):
    rows = player.find_all('tr')
    for row in rows:
        playername = row.find('td', class_= 'player-name').text
  

Комментарии:

1. Вы используете одно и то же имя переменной в последних 2 циклах for для 2 вещей.

2. Я заметил это сразу после публикации, поэтому вместо player = row.find… Я изменил переменную на player_nm, но она по-прежнему возвращает только последнее значение.

3. как вы храните свои данные. Когда вы это сделаете print('playername') , появится «Патрик Роджерс»

4. Просто запуская ваш код, печатает каждое имя для меня. repl.it/@jimtje/BriefVirtuousRefactoring

Ответ №1:

Чтобы получить все данные, попробуйте определить список и добавить каждое значение:

 players = []
for table in sg_ttg.find_all('tbody'):
    rows = table.find_all('tr')
    for row in rows:
        player = row.find('td', class_= 'player-name').text.strip()
        players.append(player)

print(players)
  

Комментарии:

1. Это отлично сработало, спасибо! Однако теперь он захватывает имена с ‘ n перед и за именами. Я новичок в Python, поэтому извините, если это глупый вопрос, но как я могу это удалить?