“Ходилка” по сайту

144
14 сентября 2019, 00:00

Есть сайт aviasales.

Мне нужно знать самое дешевое направление по тому или иному маршруту на определенную дату.

У них есть бесплатное АПИ.

Есть метод, который мне полностью подходит. (Возвращает список цен, найденных нашими пользователями за последние 48 часов, в соответствии с выставленными фильтрами.) Однако, если никто по какому-то маршруту не производил поиск, то значит данный метод не вернет мне ничего. Т.е., чтобы данный маршрут появился в этом методе необходимо просто произвести по нему поиск (перейти по ссылке типа: https://www.aviasales.ru/search/KZN2601MOW30012)/ После чего я через АПИ уже смогу получить цену.

Сейчас я просто запустил программу zennoPoster, которая ежедневно прогуливается по заданным url. Но этот подход мне не нравится, т.к. компьютер постоянно должен быть запущен. Арендовать где-то windows машину дорого.

Если на php, то просто вызов file_get_contents не даст результата, потому что подгрузка идет javascript-ом. Вычислять последовательность, т.е. искать, что делает внутри сам авиасейлс и к каким url обращается долго и ненадежно, т.к. алгоритм всегда может непредсказуемо поменяться.

Какие варианты этого решения еще могут быть? Подскажите, пожалуйста

Answer 1

Вам может помочь selenium. Для php есть php-webdriver фэйсбука.

В похожем вопросе писал рецепт использования php-webdriver c phantomjs. Разработку phantomjs вроде свернули и сейчас вместо него используют headless chrome (суть приблизительно та же).

Answer 2

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

Для более изощренной работы с сайтами можно использовать, как сказано выше? php-webdriver.

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

Answer 3

Насколько я знаю , работа с сокетами на php это слезы и боль (пробовал парсить яндекс недвижимость) , поэтому советую посмотреть в сторону python и scrapy соответственно ! А так - эмулировать браузер, как писали коллеги выше

READ ALSO
Проблемы с кодировкой в openserver

Проблемы с кодировкой в openserver

Дело в том, что после обновления openserver перестал работать один из сайтовВыдает следующую ошибку:

121
PHPUNIT (Проверить массив)

PHPUNIT (Проверить массив)

Подскажите пожалуйста как можно проверить вернулся пустой массив или нет

135
Запись значения select в БД

Запись значения select в БД

Приходит пустое значение в базуБуду благодарен за любые подсказки

119
laravel вывод товаров

laravel вывод товаров

Нужно вывести на страницу, записи из бд, а именно боковое меню и список товаровМеню выводится, а список товаров нет

107