Чтение XML-файла с URL в Python
Я использую проект OpenTripPlanner с открытым исходным кодом, который я планирую использовать для моделирования большого количества маршрутов из одной точки в другую в данный момент времени. До сих пор мне удалось найти URL, где находится XML-файл, содержащий всю информацию о маршрутах. XML создается по запросу, поэтому URL-адрес не является статичным. URL выглядит примерно так:
HTTP: // локальный: 8080 / OTP / маршрутизаторы / по умолчанию / план fromPlace = 48,40915,% 20-71.04996 & toPlace = 48,41428,% 20-71.06996 и дата = 2017/12 / 04 и время = 8: 00: 00 & режим = ТРАНЗИТ, WALK
(Для его открытия необходим сервер OpenTripPlanner)
Теперь я хочу прочитать эти XML-файлы и провести некоторый анализ данных с использованием Python 3, но я не могу найти способ прочитать файлы. Я пытался использовать urllib.request, чтобы загрузить файл локально, но файл, который я получил от этого, странным образом сформирован. Это выглядит примерно так
{"requestParameters":{"date":"2017/12/04","mode":"TRANSIT,WALK","fromPlace":"48.40915, -71.04996","toPlace":"48.41428, -71.06996","время":"8:00:00"},"план": { "дата":1512392400000,"от": { "имя": "Происхождение", "долгота":-71,04996,"ш": 48,40915,"туринг":"","vertexType":"NORMAL"},"к": { "имя": "Пункт назначения", "долгота":-71,06996,"ш": 48,41428, "туринг": ""," vertexType ":" НОРМАЛЬНЫЙ "}," маршруты ":[{" продолжительность ":1538" начальный промежуток ":1512392809000," EndTime":1512394347000,"walkTime":934,"transitTime":602,"waitingTime":2,"walkDistance": +1189,6595112715966,"walkLimitExceeded" ложь "elevationLost":0.0,"elevationGained":0.0,"передает": 0, "ножки": [{ "начальный промежуток": 1512392809000, "EndTime":1512393537000,"departureDelay":0,"arrivalDelay":0," REALTIME "ложь" расстояние ":926,553," путь ": ложь," режим ":"WALK","маршрут":"","agencyTimeZoneOffset":-18000000,"interlineWithPreviousLeg" ложь "от": { "имя": "Происхождение", "долгота":-71,04996,"ш": 48,40915,"выезд": 1512392809000, "туринг": "", "vertexType":" НОРМАЛЬНОЕ "},"to":{"name":"Roitelets / Martinets","stopId":"1:370","stopCode":"370","долгота":-71,047688,"ш": 48,401531,"прибытие": 1512393537000, "выезд":1512393538000,"stopIndex":15,"stopSequence":16,"vertexType":"ТРАНЗИТ"},"legGeometry":{"точки":"s{mfHb{Spl |ExBp@ SDL @V@@ Lb |@ J @FL @ J @GbCk | А] ^ Веса? КБ |C{@pCeACS~CuA`@Q","длина":19},"rentedBike" ложь "transitLeg" ложь "длительность":728,0, "шаги": [{ "расстояние":131,991, "lativeDirection":"DEPART","streetName":"Rue D.-V.-Morrier","absoluteDirection":"SOUTH","stayOn":false,"area":false,"bogusName":false,"lon":-71.04961760502248,"lat":48.4090671692228,"elevation":[]},{"distance":72.319,"lativeDirection":"LEFT","streetName":"Rue Lorenzo-Genest","absoluteDirection":"ВОСТОК", "stayOn": ложь, "область": ложь, "bogusName": ложь, "долгота":-71.0502299,"ш":48.4079519,"высота": []}
И когда я пытаюсь открыть файл в браузере, я получаю сообщение об ошибке
XML Parsing Error: not well-formed
Location: http://localhost:63342/XML_reader/file.xml?_ijt=e1d6h53s4mh1ak94sqortejf9v
Line Number 1, Column 1: ...
Сценарий, который я использую, очень прост, выглядит так
import urllib.request
testfile = urllib.request.URLopener()
file_name = 'http://localhost:8080/otp/routers/default/plan?fromPlace=48.40915,%20-71.04996&toPlace=48.41428,%20-71.06996&date=2017/12/04&time=8:00:00&mode=TRANSIT,WALK'
testfile.retrieve(file_name, "file.xml")
Как я могу сделать выходные XML-файлы правильно сформированными? Есть ли другой способ, кроме urllib.request, который я могу попробовать?
большое спасибо
1 ответ
Чтобы импортировать этот файл как данные JSON (не XML), вам нужна библиотека JSON
import urllib.request
import json
from pprint import pprint
testfile = urllib.request.URLopener()
file_name = 'http://localhost:8080/otp/routers/default/plan?fromPlace=48.40915,%20-71.04996&toPlace=48.41428,%20-71.06996&date=2017/12/04&time=8:00:00&mode=TRANSIT,WALK'
testfile.retrieve(file_name, "file.json")
data = json.load(open('file.json'))
pprint(data)
json.load
читает данные JSON и преобразует их в объект Python ( https://docs.python.org/2/library/json.html?highlight=json%20load)pprint
предназначен для "красивой печати" данных JSON ( https://docs.python.org/2/library/pprint.html)