Вопрос или проблема
Я пытаюсь выполнить curl -I zomato.com | head -n 1
и не получаю никакого ответа.
% Всего % Получено % Передано Средняя скорость Время Время Время Текущий Загружено Загружено Всего Проведено Осталось Скорость
0 0 0 0 0 0 0 0 --:- -:-- 0:05:29 --:- -:-- 0
Защищен ли сайт брандмауэрами?
Даже wget
не работает на этом сайте. Другие сайты, такие как google.com
, возвращают 200
ответ, как и ожидалось.
$ curl -I --max-redirs 1 "https://www.zomato.com/" 2>/dev/null | grep "^location:" | awk '{print $2}'
https://www.zomato.com/some-location-in-mongolia
так что…
$ newURL=$(curl -I --max-redirs 1 "https://www.zomato.com/" 2>/dev/null | grep "^location:" | awk '{print $2}'| grep -o ".*[a-z]"); curl -I "$newURL" | head -n 1
% Всего % Получено % Передано Средняя скорость Время Время Время Текущий
Загружено Загружено Всего Проведено Осталось Скорость
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
HTTP/2 200
не уверен, разрешено ли помогать с парсингом на этом форуме, но;
wget --header "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" --header "Host: www.zomato.com" --header "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" "https://www.zomato.com/bangalore/restaurants/biryani"
Ответ или решение
Проблема, с которой вы столкнулись при использовании инструментов curl
и wget
, может быть связана с несколькими факторами. Давайте рассмотрим возможные причины и решения.
1. Блокировка запросов
Сайты, такие как Zomato, могут использовать различные механизмы защиты, чтобы предотвратить автоматизированные запросы. Один из таких механизмов – блокировка запросов, исходящих от инструментов командной строки, таких как curl
и wget
. Это может быть сделано с помощью анализа заголовков User-Agent. Чтобы обойти эту блокировку, можно задать User-Agent, повторяющий браузер. Например:
curl -A "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" -I "https://www.zomato.com/"
2. Использование HTTPS
Обратите внимание, что вы используете HTTPS. Убедитесь, что curl
и wget
поддерживают HTTPS. Вы также можете проверить, работает ли сайт с использованием браузера, чтобы исключить проблемы с доступом к самому сайту.
3. Перенаправления
Если сайт делает перенаправления (например, с http
на https
), вам нужно убедиться, что curl
или wget
обрабатывают эти перенаправления должным образом. Для curl
вы можете использовать флаг -L
, чтобы следовать перенаправлениям:
curl -L -I "https://www.zomato.com/"
4. Таймауты
Если сайт не отвечает в разумные сроки, попробуйте увеличить таймауты:
curl --max-time 30 -I "https://www.zomato.com/"
5. Анализ ответа
Вы можете использовать curl
с подробным выводом, чтобы увидеть, какие заголовки и ответы приходят от сервера:
curl -v -I "https://www.zomato.com/"
6. Проверка wget
Аналогично, для wget
вы можете настроить User-Agent и проверить работу команды:
wget --user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3" "https://www.zomato.com/"
Заключение
Если все перечисленные шаги не помогли, вероятно, сайт Zomato активно защищается от парсинга и scraping. В этом случае, возможно, вам потребуется рассмотреть альтернативные методы доступа к данным, такие как использование официального API, если такая возможность существует. Убедитесь, что вы соблюдаете условия использования сайта.