парсер сайтов на php

342
30 мая 2017, 03:36

всем привет!

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

Answer 1

Вы в целом в той ситуации, в которой находится каждый новичок, который начинает писать свои программы на PHP: все скрипты запускаются из браузера! :)

Ну в целом да, удобно, пока не поймете определенных проблем связанных с timeout, зависанием браузера при выводе большого объема данных и т.д. True разработчики так не делают, потому что познают весь смысл командной строки и ее прелести, поэтому запускают долгие скрипты только от туда и благодаря этому не используются излишне php-fpm.

Ваша задача при написании программного обеспечения, которое отвечает на запросы пользователей - это максимально быстро отдать ответ, чтобы не засорять очередь запросов!

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

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

Де́мон (daemon, dæmon, др.-греч. δαίμων божество) — компьютерная программа в системах класса UNIX, запускаемая самой системой и работающая в фоновом режиме без прямого взаимодействия с пользователем.

Для начала, вы можете создавать записи в БД со списком урлов, которые нужно парсить и забирать их скриптом по определенному запросу, который работает в режиме демона. Конечно, вы врятли еще знакомы с понятием демона, поэтому можете начать с создания задачи в планировщике cron, который будет запускать этот скрипт с определенной периодичностью.

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

Answer 2

Если слишком не заморачиватся, то можно не в браузере запускать, а в консоле wget

wget -O - -q -t 9999 http://www.example.com/parser/run

Параметр -t 9999 устанавливает время ожидания

READ ALSO
Как использовать Twig

Как использовать Twig

У меня небольшой проект (mvc,OOP)Покажите пожалуйста как правильно подключать Twig и как его использовать в controller

347
Привет кто поможет с Telegram bot? написано на PHP

Привет кто поможет с Telegram bot? написано на PHP

У меня есть бот который при приветствии отправляет id пользователяПомогите реализовать генерацию этого id с помощью QR кода и отправку пользователю...

351
Помогите с парсером

Помогите с парсером

Помогите пожалуйста кот может, хочу парсить эту вкладку:

262
Пагинатор на php

Пагинатор на php

Итак, в интернете есть много инструкций, скриптов как сделать пагинатор для постраничного вывода из базы mysql, типа 1, 2, 3

303