0

При попытке get-запроса, статус код: 401 - https://leroymerlin.ru/catalogue/ Я так понимаю, что в данном случае необходимо использовать post-запрос? Но что передавать в нем?

Это ведь защита сайта от сбора информации? Как такое обходить? В какую сторону читать?

Спасибо заранее!

import requests

def get_html(url): s = requests.Session() response = s.get(url=url) print(response.status_code)

def main(): get_html(url="https://leroymerlin.ru/catalogue/stroymaterialy/")

if name == "main": main()

  • покажите минимальный код, который позволяет воспроизвести ошибку – ZxNuClear Sep 03 '22 at 09:53
  • исправил вопрос, добавил код – maxwjiill Sep 03 '22 at 10:37
  • так у вас результатом выполнение функции и является вывод статуса print(response.status_code) – ZxNuClear Sep 03 '22 at 10:45
  • Я записывал, то что забирал гет-запрос в html файл. Код не был похож на тот, что я видел если смотрел через браузер.

    status_code я начал выводить, чтобы посмотреть что возвращает, возвращает - 401 - "запрос не был применён, поскольку ему не хватает действительных учётных данных для целевого ресурса"

    И я не понимаю, что мне делать далее для того, чтобы забрать информацию. Подумал, что необходимо использовать post-запрос и вообще послушать, что скажут более опытные люди)

    – maxwjiill Sep 03 '22 at 10:56
  • 1
    "что скажут более опытные люди" лично вам переходить на селенимум. А чтоб писать POST-запросы надо уметь их перехватывать. Почитать на досуге https://ru.stackoverflow.com/a/924276/470333 – Сергей Ш Sep 03 '22 at 11:38
  • Я прочитал по селениуму сразу же как у меня не получилось, получить код страницы. Я пытаюсь открыть этот же сайт через сеелниум, и он выдает, что я пытаюсь зайти через VPN.

    То есть фактически опять сталкиваюсь с "защитой" (надеюсь это "защита") сайта и не могу собирать информацию) Самое главное, что я не могу найти информацию по тому, что именно мне мешает конкретно с этим сайтом)

    – maxwjiill Sep 03 '22 at 12:29

1 Answers1

1
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:104.0) Gecko/20100101 Firefox/104.0',
}
response = requests.get('https://leroymerlin.ru/content/elbrus/moscow/ru/catalogue.navigation.json', headers=headers)

for category in response.json()['children']:
    print()
    print(category['name'])
    print(f"  site https://leroymerlin.ru{category['sitePath']}")
    print(f"  json https://leroymerlin.ru/content/elbrus/moscow/ru{category['navigationChunk']}")
    for subcategory in category['children']:
        print('    ', subcategory['name'])
        print(f"{' '*6}site https://leroymerlin.ru{subcategory['sitePath']}")
        print(f"{' '*6}json https://leroymerlin.ru/content/elbrus/moscow/ru{subcategory['navigationChunk']}")

Стройматериалы
  site https://leroymerlin.ru/catalogue/stroymaterialy/
  json https://leroymerlin.ru/content/elbrus/moscow/ru/catalogue/stroymaterialy.navigation.json
     Сухие смеси и грунтовки
      site https://leroymerlin.ru/catalogue/suhie-smesi-i-gruntovki/
      json https://leroymerlin.ru/content/elbrus/moscow/ru/catalogue/suhie-smesi-i-gruntovki.navigation.json
     Изоляционные материалы
      site https://leroymerlin.ru/catalogue/izolyacionnye-materialy/
      json https://leroymerlin.ru/content/elbrus/moscow/ru/catalogue/izolyacionnye-materialy.navigation.json
....
  • Спасибо за полезный код! Можно, вас, попросить объяснить принцип поиска json'а для гет запроса? – maxwjiill Sep 04 '22 at 11:00
  • И правильно я понимаю, что забирая подобные json я не могу инофрмацию по товарам вытянуть? Я могу находить только ссылки на все товары? – maxwjiill Sep 04 '22 at 11:23
  • 1
    "объяснить принцип поиска json'а" ссылку давал ранее, принцип тот-же, анализируем содержимое запросов (что получаем, какие данные отсылаем), строим логическую цепочку – Сергей Ш Sep 04 '22 at 12:48
  • С этим вопросом разобрался) Сайт отдал способ навигация по нему, я смог достать ссылки абсолютно на все подкатегории. Но далее стоит вопрос в заборе данных с товаров в этих подкатегориях). По вашему методу я смог найти json и с товарами, но его забирать можно только post методом (как я понял). Это я и должен теперь сделать, так?) – maxwjiill Sep 04 '22 at 17:25
  • .... cтроим логическую цепочку :). С помощью чего отлавливаешь запросы? – Сергей Ш Sep 04 '22 at 17:55
  • Использую в хроме F12-> Network – maxwjiill Sep 05 '22 at 08:04
  • 1
    https://ru.stackoverflow.com/a/1420241/470333 – Сергей Ш Sep 05 '22 at 11:01
  • Если честно - шок) Ну вроде все в открытом доступе лежит, но найти сам не мог подобное) Спасибо вам! – maxwjiill Sep 05 '22 at 17:01