#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, поэтому извините, если это глупый вопрос, но как я могу это удалить?