Получение 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
![]()
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 .
Затем мы можем проинтерпретировать файл, используя метод 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.dumps() с параметром indent (отступ).
В данном примере мы сделаем отступ в 4 пробела и будем печатать данные в более удобном для чтения формате.
print(json.dumps(fcc_data, indent=4))

Также мы можем отсортировать ключи в алфавитном порядке, используя параметр sort_keys и установив его значение на True .
print(json.dumps(fcc_data, indent=4, sort_keys=True))

Заключение
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