Реализовать сбор данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
enterigo
Сообщения: 2
Зарегистрирован: 2018.04.27, 10:28

Реализовать сбор данных

Сообщение enterigo »

Здравствуйте. Имеется следующая задача: нужно с любого сайта по поиску работы собрать список вакансий полученных по своему поисковому запросу(ссылку на сбор вакансий получаем из БД), на выходе получить количество и сам список ссылок на вакансии(также список полученных ссылок записать в БД).
Проблема в том что я новичок от слова совсем, смутно понимаю с чего начать. Буду очень благодарен за любую информацию по данному поводу.
SindBad
Сообщения: 81
Зарегистрирован: 2015.06.18, 10:53

Re: Реализовать сбор данных

Сообщение SindBad »

Здравствуйте!
С абсолютно любого не получится, надо заранее знать список и проектировать возможность его постоянно расширять.

Для этого Вам нужно сделать абстрактный базовый класс, который умеет
1) получать страницу по указанной ссылке
-- метод можно сделать с минимальной реализацией через file_get_contents
2) парсить данные, вытаскивая необходимые ссылки
-- сделать метод однозначно абстрактным
3) подсчитывать их количество
-- скажем, это будет count($this->links) или что-то в этом роде
4) сохранять всё в БД.
-- методу желательно использовать модель таблицы, в которой предполагается хранить ссылки.

Далее от этого класса наследовать сервисы (т. е. другие классы), по одному на каждый тип ссылок (на каждый источник).
При необходимости можно перегружать метод получения, если, скажем, надо получать данные через POST или через авторизацию.

Метод парсинга данных у каждого сервиса должен быть реализован по-своему. Где-то ссылки парсятся из одного HTML-блока, где-то из другого,
а где-то, может быть, вообще будет JSON или XML. Сохранять ссылки можно в свойство $this->links, например, чтобы другие методы могли их посчитать и сохранить.

Методы 3 и 4, скорее всего, можно сделать финальными и вообще не перегружать. Они везде будут работать одинаково.

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

Показанная основа примитивна, но дает масштабируемость и уверенность в завтрашнем дне :)

P. S. Для разбора HTML можно использовать библиотеку https://packagist.org/packages/electrolinux/phpquery
enterigo
Сообщения: 2
Зарегистрирован: 2018.04.27, 10:28

Re: Реализовать сбор данных

Сообщение enterigo »

Спасибо огромное за ответ! Буду разбираться)
Ответить