Создать парсер (задача для новичков/стажеров)
Здравствуйте. Есть бессрочная задача для начинающего программиста по разработке аналитической утилиты (для нужд SEO). Проект подойдёт для тех новичков, кто сейчас не занят и хочет прокачать скиллы на реальной задаче, получив за это хоть какие-то деньги. Работать придётся, в основном, с парсингом контента сайтов и с построением метрик на множестве собранных парсером страниц.
Программа должна быть выполнена на одном из следующих языков: PHP, C/C++, Java. Увы, набор ограничен только теми языками, с которыми заказчик знаком не понаслышке :-) Среда исполнения — Linux-сервер (т.е. headless, поэтому интерфейс либо CLI, либо веб-морда, отчёты программа должна в любом случае генерировать в csv или чём-то ещё табличном вплоть до html table). Хранилище: SQLite, MySQL или MongoDB, Redis.
Конкретных сроков — нет. Надо начать работать над программой и показывать какой-то прогресс. Но оплата будет осуществляться только по мере приближения к цели. Если вам надоест, вы можете бросить проект на полпути, и никто на вас за это не рассердится. Гонорар — скромный (конкретную сумму предлагайте сами в указанных приделах).
Использование готовых библиотек, классов, фреймворков и пр. — только приветствуется. И, насколько мы понимаем, многое из нужного уже сделано до нас.
Стиль кодирования — на усмотрение исполнителя. Чудес ООП от исполнителя не требуется (но и они не возбраняются). Основные характеристика кода, которые интересуют: понятность (да, ясно, что это субъективная характеристика) и модульность (потому что потом, возможно, программу придётся дорабатывать, внося новые фичи).
Результат после тестирования и допиливания будет обязательно выложен в открытом коде под GPL (да-да, чтобы потом этот код не впитали в какой-нибудь закрытый проект).
Теперь подробнее о функционале. Надо создать программу, которая будет выполнять следующее:
1. Парсить сайт (начиная с главной страницы), учитывая (как любой порядочный краулер) директивы файла robots.txt, т.е. игнорировать кластеры сайта, помеченные директивой Disallow, не выполнять запросы чаще, чем это предписано директивой Crawl Delay и пр. Важно: парсер должен нормальное съедать даже невалидные (в приделах разумного) страницы.
2. По итогам парсинга и обработки html всех полученных страниц, составлять отчёт в виде таблицы со следующими полями:
Абсолютный url страницы | Title страницы | Количество исходящих внутренних ссылок со страницы | Количество исходящих внешних ссылок со страницы | Количество входящих внутренних ссылок на данную страницу с других страниц сайта
Понятно, что для заполнения последнего столбца требуется анализ всей совокупности.
3. Для каждой страницы в отдельности программа должна строить отчёт в виде трёх списков: списка из абсолютных адресов и title`ов страниц, ссылающихся на данную (т.е. список входящих внутренних ссылок); списка из абсолютных адресов и title`ов внутренних страниц, на которые ссылается данная (т.е. список исходящих внутренних ссылок); списка из абсолютных адресов и title`ов внешних страниц, на которые ссылается данная (т.е. список исходящих внешних ссылок).
Далее к этой программе, вероятно, потребуются доработки. Например, среди внутренних ссылок надо будет выделять группы, построенные на основе заданных xpath или jquery-селекторов. Это необходимо чтобы, например, можно было понять, сколько на данную страницу имеется внутренних ссылок из меню, а сколько — из контента. Но это всё уже задачки «повышенной сложности», их сейчас решать не требуется, но требуется сразу строить легко расширяемую программу (что бы это не значило).
Спасибо за внимание. Ждём предложений от желающих. Человек, который успешно решит данную задачу, скорее всего, получит от нас ещё несколько подобных задач (примерно на тех же условиях).