первая проблема, li.select('strong')
должно быть li.select_one('strong')
или просто li.strong.text
для возврата первого элемента.
вторая проблема, .get("class")
вернет массив, как ["tratta"]
if li.get("class") == "tratta" : # not correct
if li.get("class") == ["tratta"] : # correct
if "tratta" in li.get("class") : # correct
третья проблема, ваш точный результат неверен
[
{'ROUTE': 'NAPOLI PORTA DI MASSA » ISCHIA'},
{'DEPARTURE TIME': '08:35'},
{'DEPARTURE TIME': '14:10'},
{'ROUTE': 'POZZUOLI » ISCHIA'},
{'DEPARTURE TIME': '06:10'},
{'DEPARTURE TIME': '09:40'}, ....
]
Правильная логика: DEPARTURE TIME
это list
[
{'ROUTE': 'NAPOLI PORTA DI MASSA » ISCHIA', 'DEPARTURE TIME': ['08:35', '14:10', '18:30']},
{'ROUTE': 'POZZUOLI » ISCHIA', 'DEPARTURE TIME': ['06:10', '09:40', '13:30', '16:30', '20:30']}
]
и вот рабочий код
medmar_live_departures_table = list(soup.select('li.tratta'))
DEPARTURE_TIME = []
for li in medmar_live_departures_table:
next_li = li.find_next_sibling("li")
while next_li and next_li.get("data-toggle"):
DEPARTURE_TIME.append(next_li.strong.text)
next_li = next_li.find_next_sibling("li")
medmar_live_departures_data.append({
'ROUTE' : li.text,
'DEPARTURE TIME' : DEPARTURE_TIME
})
DEPARTURE_TIME = []
print(medmar_live_departures_data)
Я использую селектор li.tratta
для ROUTE
value и find_next_sibling () для поиска атрибута data-toggle
, который будет значением для DEPARTURE TIME