HTTP-запросы и разбор JSON в Python - PullRequest
159 голосов
/ 17 июня 2011

Я хочу динамически запрашивать Google Карты через API Google Directions.Например, этот запрос вычисляет маршрут из Чикаго, штат Иллинойс, в Лос-Анджелес, штат Калифорния, через две путевые точки в Джоплине, Миссури и Оклахома-Сити, ОК:

http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false

Возвращает результат в формате JSON .

Как это сделать в Python?Я хочу отправить такой запрос, получить результат и разобрать его.

Ответы [ 6 ]

283 голосов
/ 17 июня 2011

Я рекомендую использовать удивительные запросы библиотека:

import requests

url = 'http://maps.googleapis.com/maps/api/directions/json'

params = dict(
    origin='Chicago,IL',
    destination='Los+Angeles,CA',
    waypoints='Joplin,MO|Oklahoma+City,OK',
    sensor='false'
)

resp = requests.get(url=url, params=params)
data = resp.json() # Check the JSON Response Content documentation below

Содержимое ответа JSON: http://docs.python -requests.org / ru / latest / user / quickstart / # json-response-content

122 голосов
/ 08 июля 2013

Модуль Python requests обеспечивает как извлечение данных JSON, так и их декодирование благодаря встроенному декодеру JSON.Вот пример, взятый из документации модуля :

>>> import requests
>>> r = requests.get('https://github.com/timeline.json')
>>> r.json()
[{u'repository': {u'open_issues': 0, u'url': 'https://github.com/...

Так что нет необходимости использовать какой-то отдельный модуль для декодирования JSON.

31 голосов
/ 05 ноября 2013

requests имеет встроенный .json() метод

import requests
requests.get(url).json()
23 голосов
/ 17 июня 2011
12 голосов
/ 22 марта 2013

Используйте библиотеку запросов, довольно распечатайте результаты, чтобы вы могли лучше найти ключи / значения, которые вы хотите извлечь, а затем используйте вложенные циклы for для анализа данных. В этом примере я извлекаю пошаговые инструкции.

import json, requests, pprint

url = 'http://maps.googleapis.com/maps/api/directions/json?'

params = dict(
    origin='Chicago,IL',
    destination='Los+Angeles,CA',
    waypoints='Joplin,MO|Oklahoma+City,OK',
    sensor='false'
)


data = requests.get(url=url, params=params)
binary = data.content
output = json.loads(binary)

# test to see if the request was valid
#print output['status']

# output all of the results
#pprint.pprint(output)

# step-by-step directions
for route in output['routes']:
        for leg in route['legs']:
            for step in leg['steps']:
                print step['html_instructions']
5 голосов
/ 31 марта 2018

Попробуйте это:

import requests
import json

# Goole Maps API.
link = 'http://maps.googleapis.com/maps/api/directions/json?origin=Chicago,IL&destination=Los+Angeles,CA&waypoints=Joplin,MO|Oklahoma+City,OK&sensor=false'

# Request data from link as 'str'
data = requests.get(link).text

# convert 'str' to Json
data = json.loads(data)

# Now you can access Json 
for i in data['routes'][0]['legs'][0]['steps']:
    lattitude = i['start_location']['lat']
    longitude = i['start_location']['lng']
    print('{}, {}'.format(lattitude, longitude))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...