проверка данных при парсинге сайта
При парсинге страницы (https://maxline.by/mstat.php?p=170888:105457:664287:11243120) на ней не всегда отражается полная информация ( 5 матчей каждой из команд). Подскажите пожалуйста как сделать проверку наличия всех игр. Тоесть если какой то матч отсутствует, как на данной страницы, то парсер выводин какойнибудь предупреждающий текс, а не выдает ошибку.
def get_html(url, params=None):
r = requests.get(url, headers=HEADERS, params=params)
return r
def get_content(html):
soup = BeautifulSoup (html, 'html.parser')
play = {
'league': soup.find(class_='mstat__title').find('h1').find_all('b')[0].get_text(strip=True),
'teams' : soup.find(class_='mstat__title').find('h1').find_all('b')[1].get_text(strip=True)
}
one = soup.find_all(class_='ev-mstat-tbl')[0]
team_one = {
'game1': one.find_all(target='_blank')[0].get_text(strip=True),
'check1': one.find_all('td', class_='score')[0].get_text(strip=True),
'game2': one.find_all(target='_blank')[1].get_text(strip=True),
'check2': one.find_all('td', class_='score')[1].get_text(strip=True),
'game3': one.find_all(target='_blank')[2].get_text(strip=True),
'check3': one.find_all('td', class_='score')[2].get_text(strip=True),
'game4': one.find_all(target='_blank')[3].get_text(strip=True),
'check4': one.find_all('td', class_='score')[3].get_text(strip=True),
'game5': one.find_all(target='_blank')[4].get_text(strip=True),
'check5': one.find_all('td', class_='score')[4].get_text(strip=True),
}
two = one = soup.find_all(class_='ev-mstat-tbl')[1]
team_two = {
'game1': two.find_all(target='_blank')[0].get_text(strip=True),
'check1': two.find_all('td', class_='score')[0].get_text(strip=True),
'game2': two.find_all(target='_blank')[1].get_text(strip=True),
'check2': two.find_all('td', class_='score')[1].get_text(strip=True),
'game3': two.find_all(target='_blank')[2].get_text(strip=True),
'check3': two.find_all('td', class_='score')[2].get_text(strip=True),
'game4': two.find_all(target='_blank')[3].get_text(strip=True),
'check4': two.find_all('td', class_='score')[3].get_text(strip=True),
'game5': two.find_all(target='_blank')[4].get_text(strip=True),
'check5': two.find_all('td', class_='score')[4].get_text(strip=True),
}
print(play)
print(team_one)
print(team_two)
parse()
Ответы (1 шт):
Автор решения: Сергей Ш
→ Ссылка
"парсер выводин какойнибудь предупреждающий текс, а не выдает ошибку." Для этого можно использовать try-except. Ну если граммотно написать код try-except могут не понадобится.
Как пример:
import requests
from bs4 import BeautifulSoup
html = requests.get('https://maxline.by/mstat.php?p=170888:105457:664287:11243120')
soup = BeautifulSoup(html.content, 'html.parser')
games = soup.find_all(class_='ev-mstat-tbl')
for one in games:
title, *nat = one.find_all('tr')
print(title.text.replace(' (23)', ''))
print()
#z = [nat[x] for x in range(0, len(nat), 2)]
z = [x for i, x in enumerate(nat[2:], 1) if i % 2]
for c in z:
game, check = [x.text for x in c.find_all('td')]
print(game.replace(' (23)', ''))
print(check)
print('-------')
вывод
Последние игры Венесуэла:
Венесуэла - Боливия
3:2 (31:33, 25:18, 24:26, 25:22, 15:11)
Колумбия - Венесуэла
3:0 (25:23, 25:15, 25:18)
Перу - Венесуэла
3:1 (25:22, 20:25, 26:24, 25:20)
Венесуэла - Иран
0:3 (14:21, 21:23, 17:21)
Аргентина - Венесуэла
0:3 (18:21, 14:21, 14:21)
-------
Последние игры Боливия:
Венесуэла - Боливия
3:2 (31:33, 25:18, 24:26, 25:22, 15:11)
Доминиканская Респ. - Боливия
3:2 (25:19, 21:25, 19:25, 25:23, 15:12)
-------