【发布时间】:2019-02-26 21:33:08
【问题描述】:
我想从this API 抓取时间表数据。返回的数据为 JSON 格式。我正在使用 python。
我试过以下代码:
snav_timetable_url = "https://booking.snav.it/api/v1/rates/1040/2019-02-25/1042/2019-02-25?lang=1"
fh = urllib.request.urlopen(snav_timetable_url)
snav_timetable = fh.read().decode('utf-8')
fh.close()
snav_timetable_data = json.loads(snav_timetable[len(snav_timetable)-2])
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['strDatarri']
})
但出现错误
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
我做错了什么?
【问题讨论】:
-
请注意,您不是在“抓取”任何东西,这就是应该使用 json api 的方式。
-
为什么要索引 JSON 字符串?
snav_timetable[len(snav_timetable)-2]不是有效的 JSON 文档,它是文档中的单个字符。只需解码整个字符串。
标签: python json web-scraping