@NaoFumi008

Не понимаю почему код выводит пустой список?

import requests
from bs4 import BeautifulSoup

url = 'https://sbermarket.ru/?city_name=sankt-peterburg'
req = requests.get(url, headers={
'User-Agent': тут мой юзер агент
}).content

soup = BeautifulSoup(req, 'lxml')
all_city = soup.find_all('a')
print(all_city)
вот код что я только не пробовал, лазил по форумам. К сожалению ничего не помогает. Только на вас надежда, спасайте.
  • Вопрос задан
  • 205 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
А ты запиши содержимое req в файл, всё сразу понятно станет...

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


Популярные сайты парсить - не в носу ковырять, они от этого защищаются.

EDIT:
NaoFumi008, а причём тут твой браузер? Твой код сам выполняет запрос, браузер ему не нужен.
Очень советую почитать про то, как вообще работает Web.
Кратко

Клиент (браузер или иная программа) делает HTTP запрос, посылая запрашиваемую часть URL и заголовки (в наиболее простом случае).
Серверная часть отвечает на запрос тем или иным документом (например, просто текстом) и своими заголовками (что это за документ, его размер, устанавливаемые cookies, и т.д.).
Клиент принимает документ и обрабатывает его. Так, браузеры находят в документе JS-скрипты и выполняют их.
Эти скрипты могут выполнять дополнительные запросы, которые обслуживаются по тому же принципу.
Сервер может сохранять сведения о запросах и сопоставлять их.

Есть две основных точки проверки клиента: непосредственно заголовки запроса (например, передан ли Referer? Переданы ли соответствующие cookies? Похож ли на правду User-Agent? Переданы ли другие необязательные, но типовые заголовки, вроде Accept-Language?) и обработка скриптов клиентом. Скажем, если клиент сделал запрос на одну страницу, но скрипт на этой странице не сделал второй запрос - возможно, клиент не браузер, а бот. Стоит его запомнить и попытаться пометить.
В твоём случае, скорее всего, отрабатывает первый сценарий, но ты можешь напороться и на второй тоже.

Выхода два: либо пытаться методом проб и ошибок выяснить, что проверяет сайт (например, сделать запрос браузером, открыть панель разработчика и скопировать заголовки запроса целиком). Либо использовать "безголовый" браузер и пакет для управления им, вроде selenium. Первый вариант долгий, второй очень жадный на ресурсы. Ни один не даёт гарантии, так как selenium вроде всё же можно обнаружить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы