Как написать парсер проектов с платформ краудфандинга?

Стоит задача по сбору (парсер) всей статистики с отечественных краудфандинговых платформ для проекта «Стартмен»:

1. Данные каждого проекта (цель, сроки проведения кампании, описание, фото, площадка и т.д.)
2. Общее количество проектов проектов (+Cоотношение собраны/не собраны/в процессе)
3. Лучшие проекты за день, топ-10, скоро заканчиваются

Зарубежные аналоги: kicktraq.com и kickspy.com

В данный момент реализована лишь часть статистики: Проекты-рекордсмены в России, статистика платформ и собранные суммы в общем по рунету - и работает все это в ручном режиме :(

Каким образом лучше реализовать сбор данных? Подобного опыта работы с таким большим объемом данных еще не было.
  • Вопрос задан
  • 2900 просмотров
Решения вопроса 1
copist
@copist
Empower people to give
Рассмотрим сбор данных с донорского сервера boomstarter.ru

Вот страница проекта на вашем сайте: thestartman.ru/projects/item1001
А вот это его донор с бумстартера: https://boomstarter.ru/projects/65396/planetarnyy_...

Нужны два скрипта: парсер страниц тОповых проектов и парсер отдельных страниц проектов
Вот список тОпов:
https://boomstarter.ru/discover/recommended рекомендуемые
https://boomstarter.ru/discover/popular популярные
https://boomstarter.ru/discover/recently-launched новые
https://boomstarter.ru/discover/ending-soon скоро завершатся
https://boomstarter.ru/discover/most-funded рекордсмены

Логика парсера тОпов бумстартера (реализация на PHP):
1. С помощью функций file_get_contents или curl или функций работы с сокетами выкачиваются страницы по указанным выше URL
2. Определяются ссылки на проекты, про которые твоя система ещё не знает. Это можно сделать через поиск ссылок на проекты с помощью регулярных выражений, с помощью DOM + XPath или с помощью phpQuery [ habrahabr.ru/post/69149 ]

вот пример кода для phpQuery, чтобы найти ссылки
$htmlContent = file_get_contents('https://boomstarter.ru/discover/recommended');
$document = phpQuery::newDocument($htmlContent);
$prjLinks = $document->find('.project-cards .project-card a');
foreach($prjLinks as $prjLink) {
   $href = $prjLink->attr('href');
   // сохранить ссылку в базу, если ещё не был сохранён
}


3. Новые найденные ссылки заносятся в таблицу с пометками: "откуда" = "с бумстартера", "когда" = "сейчас", "статус" = "не выкачано", "топ" = "рекомендуемые/популярные/новые и прочее"
4. Этот скрипт нужно запускать периодически, например, раз в сутки. На системах linux есть утилита crontab

# каждые сутки в полночь запускать скрипт
0 0 * * * php /path/to/boomstarter-parser.php


Второй скрипт должен выкачивать с бумстертера страницы проектов и заносить в базу найденные описания
Логика парсера проектов (реализация на PHP):
1. извлечь из базы ссылки на проекты, помеченные "откуда" = "бумстартер" и "статус" = "не выкачано" ИЛИ ссылки на проекты, помеченные "откуда" = "бумстартер" и "когда" = "двое суток назад и старше"
2. аналогично выкачать страницу через file_get_contents или curl
3. аналогично найти на странице картинку, описание, фонд, статус, особые признаки и прочее.
4. выкачать картинку локально
5. записать описание, фонд, статус, локальную ссылку на картинку и прочее в базу данных и пометить "статус" = "выкачано" и "когда" = "сейчас"

Этот скрипт тоже можно запускать по крону. Лучше если он будет обрабатывать небольшое количество URL за один запуск. Его нужно поставить на запуск раз в несколько минут.
Лучше сделать их него "демона", который постоянно следит за появлением новых и устаревших записей в таблице URL. Ещё вариант запускать его через создание заданий в очереди, но в принципе и так уже будет работать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
alekciy
@alekciy
Вёбных дел мастер
Качаем страницы curl-ом, нормализуем через tidy, строим DOM и через XPath парсим нужные данные.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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