BeautifulSoup обработка исключений структуры - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу реализовать обработку исключений в моем коде.Я собираю данные из Transfermarkt .Если вы посмотрите на прилагаемую фотографию, то увидите, что в сезоне 10/11 пропущена запись.BS не находит там совпадений и просто пропускает.Я реализовал некоторый код, который проверяет полную длину в конце и просто добавляет список с помощью «MISSING».К сожалению, я могу просто добавить это в конце любой страницы.Таким образом, если в середине таблицы отсутствует запись, я должен переместить ее вручную.Проблема в том, что мой год / сезон не совпадают после таких пропущенных записей.

Можно ли это сделать с селеном?

Соответствующая часть моего кода:

import requests
from bs4 import BeautifulSoup

url = 'https://www.transfermarkt.de/pep-guardiola/erfolge/trainer/5672'

headers = {'Host': 'www.transfermarkt.de',
           'Referer': 'https://www.transfermarkt.de/manuel-neuer/erfolge/spieler/17259',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}

pageTree = requests.get(url, headers=headers)
soup = BeautifulSoup(pageTree.content, 'lxml')

for title in soup.select('.box td.hauptlink > a'):
    list5.append(str('xhttps://www.transfermarkt.de') + str(title['href']))
    for titlelink in title.find_all('img'):
        list4.append(str(titlelink['alt']))

missingentries = len(list3) - len(list4)
for x in range(0, missingentries):
    list4.append(str('MISSING'))

missinglinks = len(list4) - len(list5)
for x in range(0, missinglinks):
    list5.append(str('MISSING'))

enter image description here

Мой вывод: My output

Вывод Я хочу: enter image description here

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 26 февраля 2019

Кажется, проблема в том, что вы изолируете каждый из этих связанных элементов во время их анализа.Как только они будут сохранены в отдельных списках, вы не сможете найти индекс отсутствующего элемента.

Что вы можете сделать, это сначала собрать эти элементы вместе, а затем вставить 'MISSING' в список в этой точке.В этом случае вы можете использовать исключение, чтобы поймать отсутствующий элемент.Я бы предпочел хранить их в списке списка вместо отдельного списка для каждого элемента.

import requests
from bs4 import BeautifulSoup
url = 'https://www.transfermarkt.de/pep-guardiola/erfolge/trainer/5672'
headers = {'Host': 'www.transfermarkt.de',
           'Referer': 'https://www.transfermarkt.de/manuel-neuer/erfolge/spieler/17259',
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36'}
pageTree = requests.get(url, headers=headers)
soup = BeautifulSoup(pageTree.content, 'html5lib')
list3=[]
list4=[]
list5=[]
for td in soup.find_all('td',class_='hauptlink'):
    date=td.find_previous_sibling("td")
    list3.append(date.text)
    try:
        list4.append(str(td.a.find('img')['alt']))
        list5.append(str('xhttps://www.transfermarkt.de') + str(td.a['href']))
    except AttributeError:
        list5.append('MISSING')
        list4.append('MISSING')
#just for viewing output
for item in zip(list3,list4,list5):
    print(item)

Вывод

('10/11', 'LaLiga', 'xhttps://www.transfermarkt.de/primera-division/startseite/wettbewerb/ES1/saison_id/2010')
('08/09', 'LaLiga', 'xhttps://www.transfermarkt.de/primera-division/startseite/wettbewerb/ES1/saison_id/2008')
('10/11', 'UEFA Champions League', 'xhttps://www.transfermarkt.de/uefa-champions-league/startseite/pokalwettbewerb/CL/saison_id/2010')
('08/09', 'UEFA Champions League', 'xhttps://www.transfermarkt.de/uefa-champions-league/startseite/pokalwettbewerb/CL/saison_id/2008')
('17/18', 'Premier League', 'xhttps://www.transfermarkt.de/premier-league/startseite/wettbewerb/GB1/saison_id/2017')
('10/11', 'LaLiga', 'xhttps://www.transfermarkt.de/primera-division/startseite/wettbewerb/ES1/saison_id/2010')
('09/10', 'LaLiga', 'xhttps://www.transfermarkt.de/primera-division/startseite/wettbewerb/ES1/saison_id/2009')
('08/09', 'LaLiga', 'xhttps://www.transfermarkt.de/primera-division/startseite/wettbewerb/ES1/saison_id/2008')
('15/16', '1.Bundesliga', 'xhttps://www.transfermarkt.de/1-bundesliga/startseite/wettbewerb/L1/saison_id/2015')
('14/15', '1.Bundesliga', 'xhttps://www.transfermarkt.de/1-bundesliga/startseite/wettbewerb/L1/saison_id/2014')
('13/14', '1.Bundesliga', 'xhttps://www.transfermarkt.de/1-bundesliga/startseite/wettbewerb/L1/saison_id/2013')
('18/19', 'EFL Cup', 'xhttps://www.transfermarkt.de/league-cup/startseite/pokalwettbewerb/CGB/saison_id/2018')
('17/18', 'EFL Cup', 'xhttps://www.transfermarkt.de/league-cup/startseite/pokalwettbewerb/CGB/saison_id/2017')
('13/14', 'UEFA Super Cup', 'xhttps://www.transfermarkt.de/uefa-supercup/startseite/pokalwettbewerb/USC/saison_id/2013')
('11/12', 'UEFA Super Cup', 'xhttps://www.transfermarkt.de/uefa-supercup/startseite/pokalwettbewerb/USC/saison_id/2011')
('09/10', 'UEFA Super Cup', 'xhttps://www.transfermarkt.de/uefa-supercup/startseite/pokalwettbewerb/USC/saison_id/2009')
('13/14', 'FIFA Klub-WM', 'xhttps://www.transfermarkt.de/fifa-klub-wm/startseite/pokalwettbewerb/KLUB/saison_id/2013')
('11/12', 'FIFA Klub-WM', 'xhttps://www.transfermarkt.de/fifa-klub-wm/startseite/pokalwettbewerb/KLUB/saison_id/2011')
('09/10', 'FIFA Klub-WM', 'xhttps://www.transfermarkt.de/fifa-klub-wm/startseite/pokalwettbewerb/KLUB/saison_id/2009')
('10/11', 'MISSING', 'MISSING')
('15/16', 'DFB-Pokal', 'xhttps://www.transfermarkt.de/dfb-pokal/startseite/pokalwettbewerb/DFB/saison_id/2015')
('13/14', 'DFB-Pokal', 'xhttps://www.transfermarkt.de/dfb-pokal/startseite/pokalwettbewerb/DFB/saison_id/2013')
('11/12', 'Copa del Rey', 'xhttps://www.transfermarkt.de/copa-del-rey/startseite/pokalwettbewerb/CDR/saison_id/2011')
('08/09', 'Copa del Rey', 'xhttps://www.transfermarkt.de/copa-del-rey/startseite/pokalwettbewerb/CDR/saison_id/2008')
('11/12', 'Supercopa', 'xhttps://www.transfermarkt.de/supercopa/startseite/pokalwettbewerb/SUC/saison_id/2011')
('10/11', 'Supercopa', 'xhttps://www.transfermarkt.de/supercopa/startseite/pokalwettbewerb/SUC/saison_id/2010')
('09/10', 'Supercopa', 'xhttps://www.transfermarkt.de/supercopa/startseite/pokalwettbewerb/SUC/saison_id/2009')
('18/19', 'Community Shield', 'xhttps://www.transfermarkt.de/community-shield/startseite/pokalwettbewerb/GBCS/saison_id/2018')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...