Лучше использовать библиотеку requests
, если вы используете Python 3.x. Вот как вы можете получить ответ JSON.
import requests
snav_timetable_url = "https://booking.snav.it/api/v1/rates/1040/2019-02-25/1042/2019-02-25?lang=1"
fh = requests.get(snav_timetable_url)
json_data = fh.json()
Таким образом, у вас не будет никаких ошибок и вы сможете продолжить анализ.
for departure in json_data ['data']['ratesOutward']:
snav_timetable_data_cleaned.append({
'COMPANY': 'Snav',
'CODICE CORSA': departure['coditinera'],
'DEPARTURE DATE TIME': departure['strDatapart'],
'ARRIVAL DATE TIME': departure['strDataarri']
})
Ваша ошибка в попытке декодировать один символ из ответа:
>>> snav_timetable[len(snav_timetable)-2]
'}'
Один символ не является документом JSON, поэтому по праву не удается выполнить синтаксический анализ. Вы хотите декодировать весь ответ :
snav_timetable_data = json.loads(snav_timetable)
Вы можете перейти к использованию библиотеки requests
, вместо этого здесь происходит загрузка Ответы JSON из тривиального API:
import requests
snav_timetable_data = requests.get(snav_timetable_url).json()
snav_timetable_data_cleaned = []
for departure in snav_timetable_data['data']['ratesOutward']:
snav_timetable_data_cleaned.append({
'COMPANY': 'Snav',
'CODICE CORSA': departure['coditinera'],
'DEPARTURE DATE TIME': departure['strDatapart'],
'ARRIVAL DATE TIME': departure['strDataarri']
})
Обратите внимание, что мне пришлось исправить опечатку в эталоне времени прибытия; это strDataarri
, а не strDatarri
.
Вы неправильно написали strDataarri для одного.
Кроме того, библиотека запросов может сделать это намного более чистым.
import requests
snav_timetable_url = "https://booking.snav.it/api/v1/rates/1040/2019-02-25/1042/2019-02-25?lang=1"
r = requests.get(snav_timetable_url).json()
snav_timetable_data_cleaned = []
for departure in r['data']['ratesOutward']:
snav_timetable_data_cleaned.append({
'COMPANY': 'Snav',
'CODICE CORSA': departure['coditinera'],
'DEPARTURE DATE TIME': departure['strDatapart'],
'ARRIVAL DATE TIME': departure['strDataarri']
})
Выход:
[{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-25 08:25',
'ARRIVAL DATE TIME': '2019-02-25 09:20'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-25 12:30',
'ARRIVAL DATE TIME': '2019-02-25 13:25'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-25 16:20',
'ARRIVAL DATE TIME': '2019-02-25 17:15'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-25 19:00',
'ARRIVAL DATE TIME': '2019-02-25 19:55'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-26 08:25',
'ARRIVAL DATE TIME': '2019-02-26 09:20'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-26 12:30',
'ARRIVAL DATE TIME': '2019-02-26 13:25'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-26 16:20',
'ARRIVAL DATE TIME': '2019-02-26 17:15'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-26 19:00',
'ARRIVAL DATE TIME': '2019-02-26 19:55'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-27 08:25',
'ARRIVAL DATE TIME': '2019-02-27 09:20'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-27 12:30',
'ARRIVAL DATE TIME': '2019-02-27 13:25'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-27 16:20',
'ARRIVAL DATE TIME': '2019-02-27 17:15'},
{'COMPANY': 'Snav',
'CODICE CORSA': 'NABECASA',
'DEPARTURE DATE TIME': '2019-02-27 19:00',
'ARRIVAL DATE TIME': '2019-02-27 19:55'}]