Перейти к содержимому

Как получить json с сайта python

  • автор:

Получение json-ответа от сайта для парсинга

В инструментах разработчика в ответа видно, что на get-запрос есть json-ответ, в котором вся нужная информация. Но, после выполнения кода, всегда приходит ответ в виде text/html. Добавление заголовков, тоже не помогает. Подскажите, как сформировать запрос, чтобы вытащить json с сайта.

Отслеживать
48.6k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 30 апр 2020 в 18:27
baDAattitude baDAattitude
27 6 6 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Во-первых, если смотреть в инструментах разработчика, url запроса не https://1xstavka.ru/results/ , а https://1xstavka.ru/results/getmain . Но если делать get запрос через requests на этот url, то возвращает 404 ошибку.

Если еще раз посмотреть в инструментах разработчика заголовки запроса, там можно увидеть параметр X-Requested-With: XMLHttpRequest :

Скриншот

Методом перебора определил, что именно этого параметра не хватает, чтобы приходил json ответ. Соответственно, нужно добавить этот параметр в заголовки:

import requests import json url = 'https://1xstavka.ru/results/getmain' params = headers = rs = requests.get(url, params=params, headers=headers) print(rs.json()) 

Как получить JSON, запросом в Python?

Есть сервис с которого планируется получать JSON массив с нужными данными.
Какую библиотеку в Python для этого использовать.
И как сохранить полученные данные?
Я новичок, так что прошу прошения за глупые вопросы. Если можно ссылочку на пример или кусок кода.

Погуглив решил использовать библиотеку requests, можно ли с ее помощью отправить запрос и сохранить полученный массив?

  • Вопрос задан более трёх лет назад
  • 20045 просмотров

Интерпретация JSON в Python – как читать файлы JSON

img

JSON (JavaScript Object Notation – нотация объектов JavaScript) – это популярный способ структурирования данных. Он используется для обмена информацией между веб-приложением и сервером. Но как прочитать файл JSON в Python?

В этой статье я покажу вам, как использовать методы json.loads() и json.load() для интерпретации (или как еще говорят парсинга) и чтения файлов и строк JSON.

Синтаксис JSON

Прежде чем мы приступим к интерпретации и чтению файла JSON, сначала нам нужно разобраться с основным синтаксисом. Подробнее про JSON можно почитать в этой статье. Синтаксис JSON выглядит как объектный литерал JavaScript с парами ключ-значение.

Вот пример данных JSON с данными организации:

Как парсить строки JSON в Python

Python имеет встроенный модуль, который позволяет работать с данными в формате JSON. Вам необходимо будет импортировать модуль json .

import json

Если вам необходимо проинтерпретировать строку JSON, возвращающую словарь, то вы можете воспользоваться методом json.loads() .

import json # assigns a JSON string to a variable called jess jess = '' # parses the data and assigns it to a variable called jess_dict jess_dict = json.loads(jess) # Printed output: print(jess_dict)

Как парсить и читать файлы JSON в Python

В данном примере мы имеем файл в формате JSON с именем fcc.json , который содержит те же данные, что и ранее, касающиеся курсов, которые предлагает сайт.

Если вы хотите прочитать этот файл, то для начала вам нужно использовать встроенную в Python функцию open() с режимом чтения. Мы используем ключевое слово with , чтобы убедиться, что файл закрыт.

with open('fcc.json', 'r') as fcc_file:

Если файл не может быть открыт, то мы получим ошибку OSError . Это пример ошибки «FileNotFoundError» при опечатке в имени файла fcc.json .

FileNotFoundError

Затем мы можем проинтерпретировать файл, используя метод json.load() и присвоить его переменной с именем fcc_data .

fcc_data = json.load(fcc_file)

И в конце мы должны напечатать результат.

print(fcc_data)

Вот так будет выглядеть полный код:

import json with open('fcc.json', 'r') as fcc_file: fcc_data = json.load(fcc_file) print(fcc_data)

Как красиво напечатать данные JSON в Python

Если мы посмотрим на то, как печатаются данные, то увидим, что все данные JSON печатаются в одной строке.

Данные JSON

Однако такой формат вывода может быть затруднительным для чтения. И чтобы это исправить, мы можем реализовать метод json.dumps() с параметром indent (отступ).

В данном примере мы сделаем отступ в 4 пробела и будем печатать данные в более удобном для чтения формате.

print(json.dumps(fcc_data, indent=4))

indent

Также мы можем отсортировать ключи в алфавитном порядке, используя параметр sort_keys и установив его значение на True .

print(json.dumps(fcc_data, indent=4, sort_keys=True))

sort_keys

Заключение

JSON – это популярный способ структурирования данных, который используется для обмена информацией между веб-приложением и сервером.

Если вам необходимо проинтерпретировать строку JSON, которая возвращает словарь, то вы можете использовать метод json.loads() .

Если вам необходимо проинтерпретировать файл JSON, который возвращает словарь, то вы можете использовать метод json.load() .

Получение и отправка данных в виде JSON с модулем requests в Python

Response.json и аргумент json метода equests.post() модуля requests

Получение контента в виде JSON.

Модуль requests имеет встроенный декодер JSON, на случай, если ответ приходит в виде данных JSON:

>>> import requests # отправка GET-запроса >>> resp = requests.get('https://api.github.com/events') # получение данных в виде JSON >>> resp.json() # [  

В случае сбоя декодирования JSON, метод resp.json() вызывает исключение. Например, если ответ получает 204 (без содержимого) или если ответ содержит недопустимый формат JSON , то попытка вызова метода resp.json() вызывает исключение simplejson.JSONDecodeError , если установлен simplejson , или вызывает ValueError .

Следует отметить, что успех вызова метод resp.json() не указывает на успех ответа. Некоторые серверы могут возвращать объект JSON при неудачном ответе (например, сведения об ошибке с HTTP 500). Такой JSON будет декодирован и возвращен. Чтобы проверить успешность запроса, используйте resp.raise_for_status() или проверьте resp.status_code .

Передача данных в виде JSON.

Модуль requests может отправлять данные в формате JSON. Если аргументу data метода requests.post() передать строку, вместо словаря dict , то эти данные будут отправлены непосредственно.

Например, GitHub API v3 принимает JSON-кодированные данные, методами POST/PATCH:

>>> import requests >>> import json # целевой URL-адрес >>> url = 'https://api.github.com/some/endpoint' # данные в виде словаря >>> param = 'some': 'data'> # кодируем словарь в формат JSON >>> json_param = json.dumps(param) # отправка POST-запроса с данными в формате JSON >>> resp = requests.post(url, data=json_param) 

Вместо того чтобы кодировать словарь самостоятельно, также можно передать его непосредственно с помощью аргумента json метода requests.post() (добавленного в версии 2.4.2), и данные автоматически преобразуются в формат JSON:

>>> import requests # целевой URL-адрес >>> url = 'https://api.github.com/some/endpoint' # данные в виде словаря >>> param = 'some': 'data'> >>> resp = requests.post(url, json=param) 

Обратите внимание, что аргумент json будет игнорироваться, если одновременно используется аргумент data или file .

Использование аргумента json в запросе requests.post() изменит заголовок Content-Type на application/json .

  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • GET и POST запросы c модулем requests
  • Получение/отправка заголовков сервера модулем requests
  • Извлечение и установка cookies с модулем requests
  • Сессии/сеансы Session() модуля requests
  • Объект ответа сервера Response модуля requests
  • Получение и отправка данных в виде JSON с модулем requests
  • Установка timeout для модуля requests
  • Объект PreparedRequest модуля requests
  • Загрузка файлов на сервер модулем requests
  • Загрузка больших данных модулем requests
  • HTTP-прокси или SOCKS-прокси с модулем requests
  • Использование хуков модуля requests
  • Аутентификация с модулем requests
  • SSL и модуль requests

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *