Как не выводить результат с IndexError?
Если все поля на сайте заполнены, то результат:
Login: c4actbe011
Name: Юля Баева
City: Тула
Birthdate: 1986-09-17
Но если чего-то нет, или страница не найдена (404), то ошибка:
IndexError: list index out of range
Нужно чтобы выводились только те поля, которые есть на сайте, например:
Login: live:remcoschuman
Name: Putin
Код:
import requests
from bs4 import BeautifulSoup
profile = requests.get(f'https://skypli.com/profile/live:remcoschuman')
profile_soup = BeautifulSoup(profile.content, 'lxml')
profile_info = profile_soup.findAll('div', {'class': 'profile-box__table-value'})
profile_name = profile_info[1].text.strip()
profile_city = profile_info[2].text.strip()
profile_birthdate_result = profile_info[4].text.strip()
profile_birthdate = profile_birthdate_result.replace("-",".")
print(f'Login: {username}\nName: {profile_name}\nCity: {profile_city}\nBirthdate: {profile_birthdate_result}')
Ответы (1 шт):
Автор решения: ПИТОНИСТ версия-3-8
→ Ссылка
Попробуйте так:
import requests
from bs4 import BeautifulSoup
profile = requests.get(f'https://skypli.com/profile/live:remcoschuman')
profile_soup = BeautifulSoup(profile.content, 'lxml')
profile_info = profile_soup.findAll('div', {'class': 'profile-box__table-value'})
profile_name = profile_city = profile_birthdate = 'No'
length=len(profile_info)
if length >= 2: profile_name = profile_info[1].text.strip()
if length >=3: profile_city = profile_info[2].text.strip()
if length >=5:
profile_birthdate_result = profile_info[4].text.strip()
profile_birthdate = profile_birthdate_result.replace("-",".")
print(f'Login: {username}\nName: {profile_name}\nCity: {profile_city}\nBirthdate: {profile_birthdate_result}')
Должно сработать.