Как найти json на сайте
Перейти к содержимому

Как найти json на сайте

  • автор:

Как найти ссылку на данные JSON определенного веб-сайта

Я только что закончил учебное пособие о том, как разработать приложение для Android, которое извлекает обновленные сообщения из блога с использованием данных JSON.

Ссылка на данные JSON, используемые для извлечения сообщений, — это имя блога, заканчивающееся «/api/get_recent_summary»,

Как найти ссылку на данные JSON для разных сайтов?

Например, веб-сайт The Time Magazine http://time.com

2 ответа

Самый быстрый и простой способ — использовать инструменты разработчика Google в Google Chrome.

1-й перейдите в инструменты разработчика Google.

2. Нажмите вкладку «Сеть».

3-й клик на вкладке XHR. XHR (XMLHttpRequest)

если сайт использует json, он будет указан под вкладкой XHR. Вы можете выполнять поиск по различным объектам возврата с помощью суб-вкладки предварительного просмотра.

Хотя вышеуказанный путь является самым простым, это не самый стабильный способ получения необходимой вам информации. Многие сайты вносят изменения в возвращаемые данные без какого-либо уведомления. Это, вероятно, сломает ваше приложение.

Я думаю, что вы ищете API (интерфейс прикладного программирования). Большинство веб-API возвращают json или xml. Вы должны начать с поиска документации api для конкретного сайта, из которого вы хотите получить данные json. Пример документации для сайтов, на которых есть общедоступные каналы api, — github api или youtub api. Для многих из них потребуется аутентификация, чтобы получить желаемый ответ json, но документация должна показать вам, как это сделать.

Использование законного веб-api — самый стабильный способ перехода. Это означает, что ваше приложение имеет меньше шансов случайным образом сломать все время из-за изменений в корме, изменения URL. Я надеюсь, что это поможет!

Я знаю, что это более старый вопрос, но я чувствовал себя вынужденным вмешаться. Если вы хотите просто определить, использует ли сайт JSON для обмена данными, то решение, предложенное Тимом, является очень хорошим решением. Однако, если вы хотите очистить данные с произвольного сайта, нет никакой гарантии, что сайт использует JSON в качестве обмена данными, как указано @KenanZahirovic. Есть множество сайтов, которые этого не делают. Вместо этого они вставляют данные в HTML или используют XML или какой-либо другой метод для получения содержимого клиенту. Нет стандартного способа сделать это, поэтому данные скребли настолько сложны. Это требует определения способа передачи данных и создания для этого клиента.

В сценариях, где вам нужно собирать данные из нескольких источников, вы можете столкнуться с несколькими клиентами из-за нюансов между источниками. На этом сайте объясняются некоторые рекомендации по удалению данных. Однако для этого, вероятно, потребуется приложение на стороне сервера. Наличие серверного приложения, которое собирает данные и хранит его в базе данных, будет иметь наибольший смысл для этого сценария. Таким образом, вы можете иметь согласованный API, к которому клиент обращается, чтобы получить доступ к данным.

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

Этот ответ может быть более чем необходим, но, опять же, я чувствовал себя вынужденным перезвонить. Я уверен, что предыдущего ответа было достаточно. Я рекомендую, хотя вы отмечаете ответ как принятый ответ.

Получение Json с внешнего сайта

Вернуть json с внешнего сайта
Здраствуйте На внешнем сайте есть json www.site.ru/string.json Пытался через ajax с.

Подключить json данные с внешнего ресурса
привет! помогите пожалуйста. необходимо подключить json данные по ссылке на внешний ресурс. .

Метод JSON.parse из внешнего источника
Можно ли без доп. библиотек получить данные с json файла по ссылке, который находится на другом.

Получение внешнего IP
Необходимо получить внениий IP — с этом собственно проблем нет, а вот отправить коректный https.

How to Find a JSON object of a Website

New to the JSON world and I’m trying to find out how to view a JSON object of a webpage. Will every webpage have a JSON object and if so how do I find it in order to get the data and display it on my site? I vaguely remember something about using Firebug?

2 Answers 2

Will every webpage have a JSON object

Many web sites will not use any JSON; many will be completely static (HTML and CSS only).

It may only apply if there is a «Web API» (for programmatic access to content), but there are non-JSON ways to do APIs (the X in AJAX is for XML).

To determine how to access a site programmatically look at the site’s developer documentation. If there isn’t any documentation then any AJAX web debuggers (like FireBug) show may well be internal only and intended only for the site’s own implementation; other uses could well be not welcome (you could be up for violating IP).

Как спарсить любой сайт?

Меня зовут Даниил Охлопков, и я расскажу про свой подход к написанию скриптов, извлекающих данные из интернета: с чего начать, куда смотреть и что использовать.

Написав тонну парсеров, я придумал алгоритм действий, который не только минимизирует затраченное время на разработку, но и увеличивает их живучесть, робастность, масштабируемость.

Чтобы спарсить данные с вебсайта, пробуйте подходы именно в таком порядке:

Найдите официальное API,

Найдите XHR запросы в консоли разработчика вашего браузера,

Найдите сырые JSON в html странице,

Отрендерите код страницы через автоматизацию браузера,

Если ничего не подошло — пишите парсеры HTML кода.

Совет профессионалов: не начинайте с BS4/Scrapy

BeautifulSoup4 и Scrapy — популярные инструменты парсинга HTML страниц (и не только!) для Python.

Крутые вебсайты с крутыми продактами делают тонну A/B тестов, чтобы повышать конверсии, вовлеченности и другие бизнес-метрики. Для нас это значит одно: элементы на вебстранице будут меняться и переставляться. В идеальном мире, наш написанный парсер не должен требовать доработки каждую неделю из-за изменений на сайте.

Приходим к выводу, что не надо извлекать данные из HTML тегов раньше времени: разметка страницы может сильно поменяться, а CSS-селекторы и XPath могут не помочь. Используйте другие методы, о которых ниже. ⬇️

Используйте официальный API

�� Ого? Это не очевидно ��? Конечно, очевидно! Но сколько раз было: сидите пилите парсер сайта, а потом БАЦ — нашли поддержку древней RSS-ленты, обширный sitemap.xml или другие интерфейсы для разработчиков. Становится обидно, что поленились и потратили время не туда. Даже если API платный, иногда дешевле договориться с владельцами сайта, чем тратить время на разработку и поддержку.

Sitemap.xml — список страниц сайта, которые точно нужно проиндексировать гуглу. Полезно, если нужно найти все объекты на сайте. Пример: http://techcrunch.com/sitemap.xml

RSS-лента — API, который выдает вам последние посты или новости с сайта. Было раньше популярно, сейчас все реже, но где-то еще есть! Пример: https://habr.com/ru/rss/hubs/all/

Поищите XHR запросы в консоли разработчика

Кабина моего самолета

Кабина моего самолета

Все современные вебсайты (но не в дарк вебе, лол) используют Javascript, чтобы догружать данные с бекенда. Это позволяет сайтам открываться плавно и скачивать контент постепенно после получения структуры страницы (HTML, скелетон страницы).

Обычно, эти данные запрашиваются джаваскриптом через простые GET/POST запросы. А значит, можно подсмотреть эти запросы, их параметры и заголовки — а потом повторить их у себя в коде! Это делается через консоль разработчика вашего браузера (developer tools).

В итоге, даже не имея официального API, можно воспользоваться красивым и удобным закрытым API. ☺️

Даже если фронт поменяется полностью, этот API с большой вероятностью будет работать. Да, добавятся новые поля, да, возможно, некоторые данные уберут из выдачи. Но структура ответа останется, а значит, ваш парсер почти не изменится.

Алгорим действий такой:

Открывайте вебстраницу, которую хотите спарсить

Правой кнопкой -> Inspect (или открыть dev tools как на скрине выше)

Открывайте вкладку Network и кликайте на фильтр XHR запросов

Обновляйте страницу, чтобы в логах стали появляться запросы

Найдите запрос, который запрашивает данные, которые вам нужны

Копируйте запрос как cURL и переносите его в свой язык программирования для дальнейшей автоматизации.

Вы заметите, что иногда эти XHR запросы включают в себя огромные строки — токены, куки, сессии, которые генерируются фронтендом или бекендом. Не тратьте время на ревёрс фронта, чтобы научить свой парсер генерировать их тоже.

Вместо этого попробуйте просто скопипастить и захардкодить их в своем парсере: очень часто эти строчки валидны 7-30 дней, что может быть окей для ваших задач, а иногда и вообще несколько лет. Или поищите другие XHR запросы, в ответе которых бекенд присылает эти строчки на фронт (обычно это происходит в момент логина на сайт). Если не получилось и без куки/сессий никак, — советую переходить на автоматизацию браузера (Selenium, Puppeteer, Splash — Headless browsers) — об этом ниже.

Поищите JSON в HTML коде страницы

Как было удобно с XHR запросами, да? Ощущение, что ты используешь официальное API. �� Приходит много данных, ты все сохраняешь в базу. Ты счастлив. Ты бог парсинга.

Но тут надо парсить другой сайт, а там нет нужных GET/POST запросов! Ну вот нет и все. И ты думаешь: неужели расчехлять XPath/CSS-selectors? ��‍♀️ Нет! ��‍♂️

Чтобы страница хорошо проиндексировалась поисковиками, необходимо, чтобы в HTML коде уже содержалась вся полезная информация: поисковики не рендерят Javascript, довольствуясь только HTML. А значит, где-то в коде должны быть все данные.

Современные SSR-движки (server-side-rendering) оставляют внизу страницы JSON со всеми данные, добавленный бекендом при генерации страницы. Стоп, это же и есть ответ API, который нам нужен! ������

Вот несколько примеров, где такой клад может быть зарыт (не баньте, плиз):

Красивый JSON на главной странице Habr.com. Почти официальный API! Надеюсь, меня не забанят.Красивый JSON на главной странице Habr.com. Почти официальный API! Надеюсь, меня не забанят. И наш любимый (у парсеров) Linkedin! И наш любимый (у парсеров) Linkedin!

Алгоритм действий такой:

В dev tools берете самый первый запрос, где браузер запрашивает HTML страницу (не код текущий уже отрендеренной страницы, а именно ответ GET запроса).

Внизу ищите длинную длинную строчку с данными.

Если нашли — повторяете у себя в парсере этот GET запрос страницы (без рендеринга headless браузерами). Просто requests.get .

Вырезаете JSON из HTML любыми костылямии (я использую html.find(«=<") ).

Отрендерите JS через Headless Browsers

Если XHR запросы требуют актуальных tokens, sessions, cookies. Если вы нарываетесь на защиту Cloudflare. Если вам обязательно нужно логиниться на сайте. Если вы просто решили рендерить все, что движется загружается, чтобы минимизировать вероятность бана. Во всех случаях — добро пожаловать в мир автоматизации браузеров!

Если коротко, то есть инструменты, которые позволяют управлять браузером: открывать страницы, вводить текст, скроллить, кликать. Конечно же, это все было сделано для того, чтобы автоматизировать тесты веб интерфейса. I’m something of a web QA myself.

После того, как вы открыли страницу, чуть подождали (пока JS сделает все свои 100500 запросов), можно смотреть на HTML страницу опять и поискать там тот заветный JSON со всеми данными.

Selenoid — open-source remote Selenium cluster

Для масштабируемости и простоты, я советую использовать удалённые браузерные кластеры (remote Selenium grid).

Недавно я нашел офигенный опенсорсный микросервис Selenoid, который по факту позволяет вам запускать браузеры не у себя на компе, а на удаленном сервере, подключаясь к нему по API. Несмотря на то, что Support team у них состоит из токсичных разработчиков, их микросервис довольно просто развернуть (советую это делать под VPN, так как по умолчанию никакой authentication в сервис не встроено). Я запускаю их сервис через DigitalOcean 1-Click apps: 1 клик — и у вас уже создался сервер, на котором настроен и запущен кластер Headless браузеров, готовых запускать джаваскрипт!

Вот так я подключаюсь к Selenoid из своего кода: по факту нужно просто указать адрес запущенного Selenoid, но я еще зачем-то передаю кучу параметров бразеру, вдруг вы тоже захотите. На выходе этой функции у меня обычный Selenium driver, который я использую также, как если бы я запускал браузер локально (через файлик chromedriver).

Заметьте фложок enableVNC . Верно, вы сможете смотреть видосик с тем, что происходит на удалённом браузере. Всегда приятно наблюдать, как ваш скрипт самостоятельно логинится в Linkedin: он такой молодой, но уже хочет познакомиться с крутыми разработчиками.

Парсите HTML теги

Если случилось чудо и у сайта нет ни официального API, ни вкусных XHR запросов, ни жирного JSON внизу HTML, если рендеринг браузерами вам тоже не помог, то остается последний, самый нудный и неблагодарный метод. Да, это взять и начать парсить HTML разметку страницы. То есть, например, из <a href=»https://okhlopkov.com»>Cool website</a> достать ссылку. Это можно делать как простыми регулярными выражениями, так и через более умные инструменты (в питоне это BeautifulSoup4 и Scrapy) и фильтры (XPath, CSS-selectors).

Мой единственный совет: постараться минимизировать число фильтров и условий, чтобы меньше переобучаться на текущей структуре HTML страницы, которая может измениться в следующем A/B тесте.

Даниил Охлопков — Data Lead @ Runa Capital

Подписывайтесь на мой Телеграм канал, где я рассказываю свои истории из парсинга и сливаю датасеты.

Надеюсь, что-то из этого было полезно! Я считаю, что в парсинге важно, с чего ты начинаешь. С чего начать — я рассказал, а дальше ваш ход ��

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

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