Проблемы с поиском информации о бойцах с сайта UF C - PullRequest
0 голосов
/ 02 августа 2020

В настоящее время я пытаюсь создать блог / сайт статистики ММА, и для этого я просматриваю сайт UF C в поисках информации о каждом спортсмене. Я использую Beautiful Soup и Python.

До сих пор мне удавалось соскоблить имя спортсмена, однако, когда я пропускаю oop, оно повторяет только имя первого спортсмена, а не отображает следующее. спортсмен и т. д.

from bs4 import BeautifulSoup
import requests

source = requests.get('https://www.ufc.com/athletes/all').text
soup = BeautifulSoup(source, 'lxml')



for fighter in soup.find_all('li', attrs={'class': 'l-flex__item'}):
    # nickname = fighter.span.text
    name = soup.find('span', class_='c-listing-athlete__name').text
    record = soup.find('span', class_='c-listing-athlete__record').text
    print(name, end='')

Это вывод в моем терминале: Что происходит, когда я печатаю свой код

Я был бы признателен, если бы кто-нибудь мог указать на любой ошибки, которые я допустил в логах c для l oop. Спасибо!

1 Ответ

0 голосов
/ 02 августа 2020

Вы проходите через <li>, который является коррентным, но внутри l oop вы ссылаетесь на весь URL-адрес (soup). Вам нужно использовать переменную fighter из l oop. Поскольку существует больше <li> элементов, у которых нет текста, вы можете работать с try и except.

for fighter in soup.find_all('li', attrs={'class': 'l-flex__item'}):
    # nickname = fighter.span.text
    try: 
        name = fighter.find('span', class_='c-listing-athlete__name').text
    except: 
        pass
    try:
        record = fighter.find('span', class_='c-listing-athlete__record').text
    except:
        pass
    print(f'Name:{name.strip()}, record:{record}')

вывод

Name:Shamil Abdurakhimov, record:20-5-0 (W-L-D)
Name:Ricardo Abreu, record:5-1-0 (W-L-D)
Name:Klidson Abreu, record:15-5-0 (W-L-D)
Name:Juan Adams, record:5-3-0 (W-L-D)
Name:Zarrukh Adashev, record:0-1-0 (W-L-D)
Name:Israel Adesanya, record:19-0-0 (W-L-D)
Name:Mariya Agapova, record:1-0-0 (W-L-D)
Name:Jessica Aguilar, record:20-8-0 (W-L-D)
Name:Kevin Aguilar, record:17-4-0 (W-L-D)
Name:Christian Aguilera, record:1-0-0 (W-L-D)
Name:Omari Akhmedov, record:20-4-1 (W-L-D)
Name:Omari Akhmedov, record:20-4-1 (W-L-D)
...