ТЕХНИКА, ТЕХНОЛОГИЯ, УПРАВЛЕНИЕ
УДК 004.624 Т. А. Абрамова
РАЗРАБОТКА ПАРСИНГ-СИСТЕМЫ ДЛЯ ПОЛУЧЕНИЯ СКРЫТЫХ ССЫЛОК СО СТРАНИЦ СОЦИАЛЬНЫХ СЕТЕЙ
Аннотация. Раскрывается понятие парсинга web-страниц. С помощью стандартных средств серверного языка программирования PHP разобран пример создания парсера, получающего скрытые ссылки на видео-файлы со страниц социальных сетей.
Ключевые слова: парсинг, web-приложение, web-сервер, скрипт, регулярные выражения, PHP.
В современном русском языке возникло много понятий и технических терминов, дословного перевода которых не существует. Они прочно вошли в наш обиход, стали привычными и широко используемыми. К таким понятиям относится и «парсинг». Что же это такое? Википедия дает нам следующее определение: «Парсинг - это синтаксический анализ. Он проводится с использованием специальной программы или скрипта в автоматическом режиме. Такую программу обычно называют "парсером" и используют ее для получения определенных данных с сайта. Как правило, настройки анализа пользователь задает самостоятельно. Эти данные предоставляются в определенном виде и могут быть проведены на одном из языков программирования».
Попробуем пояснить это определение на реальных примерах. Перед web-мастером или контент-менеджером сайта зачастую встает задача получения достаточно больших объемов информации с удаленных серверов. При этом имеют существенное значение несколько параметров. Во-первых, как уже было сказано, объем данных может быть очень большим и, возможно, информацию необходимо будет получать не с одного сайта, а с нескольких. Во-вторых, имеет значение время. Согласитесь, что сейчас, как никогда, пользователи стремятся получать самую актуальную и свежую информацию. Поэтому необходимо обновлять контент нашего сайта максимально быстро и эффективно. Из этого формируется третье условие - организация автоматизированного сбора данных, при котором человек выполняет только контролирующую функцию. Здесь же можно упомянуть о том, что задачи сбора информации чрезвычайно широки и разнообразны. Они зачастую включают в себя множество мелких и специфичных операций, выполнение которых в ручном режиме оказалось бы слишком нудным и долгим делом, влияющим не в лучшую сторону на скорость заполнения web-страниц.
Сразу оговоримся, что есть и стандартные программные продукты, позволяющие эффективно и быстро проводить парсинг различных сайтов. Одним из лучших считается Content Downloader. У него много достоинств: простое добавление страниц для парсинга, автоматический поиск контента, многопоточность, фильтрация текста, импорт в попу-
лярные CMS и т.д. Приятно также то, что разработчик программного обеспечения - российский программист. Но есть один немаловажный и существенный минус - программа платная.
Еще один очень хороший инструмент - ZennoPoster. Он умеет очень многое: оставлять комментарии в нужных сообществах социальных сетей, регистрировать аккаунты пользователей, подтверждать их почту, наполнять электронные магазины товарами и т.п. Но тоже, к сожалению, является платным продуктом.
Есть ли смысл платить деньги, если наша задача не является сверхсложной в реализации и к тому же достаточно специфическая? Попробуем разработать свой парсер, чтобы убедиться, что нам это по силам.
Существует так называемый «джентльменский набор web-разработчика»: HTML, PHP, MySQL, JavaScript и CSS [1]. Работать этот набор прекрасно может в сочетании с web-сервером Apache. Все описанное выше программное обеспечение является свободно распространяемым и доступно к скачиванию в сети. Отдельно хочется подчеркнуть, что Apache успешно работает на миллионах машин во всем мире и является одним из самых популярных и распространенных web-серверов. Такая популярность не случайна: он прост, надежен в использовании, экономичен по отношению к вычислительным ресурсам, быстро работает и не требует никаких лицензий (то есть совершенно бесплатен). Не секрет, что в настоящее время очень популярным для разработчиков тандемом являются PHP и MySQL. PHP прост в использовании, в нем допустимы ссылки на программу базы данных MySQL, он позволяет легко и непринужденно создавать на web-сайтах динамические элементы и отлично вписывается в HTML-код [2]. Для нас использование языка PHP важно потому, что он имеет в своем составе мощные инструменты для работы с регулярными выражениями. Регулярное выражение - это небольшой фрагмент кода, который описывает образец текста, содержащийся в ваших данных. Они используются для поиска и замены образцов текста, поддерживаются многими системными окружениями, языками программирования, а также языками, предназначенными для web-разработок, в число которых входит PHP [3].
Установить PHP на web-сервер можно двумя способами: как CGI-приложение или как SAPI-модуль Apache. Первый способ проще в установке и обычно все подключения начинают работать сразу же и без каких-либо проблем. Но все же наиболее предпочтительным является второй способ, т.к. здесь мы получаем значительный выигрыш в скорости. Обычно это заметно при работе на нагруженных серверах с большим количеством посетителей.
Перед установкой сервера Apache необходимо проверить сетевые установки, а также убедиться в том, что на вашем компьютере отсутствуют программы, занимающие порты 80 и 3306. Для того, чтобы проверить эти порты, наберем в командной строке следующее:
netstat -anb
Если в выведенном на экран списке присутствуют строки с портами 80 и 3306, то Apache работать не будет. Чаще всего эти порты занимает Skype или web-сервер IIS. В таком случае, перед тем, как устанавливать или начинать работу с Apache, эти программы запускать не следует.
Ознакомиться со всеми тонкостями установки можно из официальной документации, которая есть в сети в свободном доступе. Также процесс установки, настройки и запуска сервера Apache и устанавливаемых на него PHP и MySQL подробно описан в [1].
Если тонкости установки и настройки указанного web-сервера покажутся сложными, рекомендуется воспользоваться готовым комплектом для так называемого «ленивого web-разработчика». Самая известная и популярная в России система носит название «Денвер», разработана Дмитрием Котеровым и доступна для свободного скачивания на сайте http://www.denwer.ru.
Пакет включает в себя следующие компоненты:
- Apache, SSL, SSI, mod_rewrite, mod_php;
- PHP5 с поддержкой GD, MySQL, sqLite;
- MySQLs с поддержкой транзакций;
- Система управления виртуальными хостами, основанная на шаблонах;
- phpMyAdmin - система управления MySQL через Web-интерфейс;
- Эмулятор sendmail и SMTP-сервера; поддерживается работа совместно с PHP, Perl, Parser и т.д.
Теперь перейдем непосредственно к решению нашей задачи. Социальная сеть «ВКонтакте» (https://vk.com) предоставляет нам множество изображений, аудио- и видеофайлов для просмотра. Но, как оказалось, не все из них доступны для прямого скачивания. Здесь может быть несколько различных ситуаций. Возможно, видео находится на одном из внешних серверов, например на очень популярном сейчас видеохостинге «YouTube» (https://www.youtube.com), называемом русскоязычными пользователями Интернета «ютуб». Тогда при просмотре кода элемента на нужной странице мы увидим следующее (рис. i).
▼ <div class="video_box_wrap" style="width: 607рх; height: 341рх;
▼ <div id="video_player" style="wi<tth: 6Ö7px; height : 341рх;м> ▼ <div id="video_yt" tabindex="0" style="width: 100%;height : 106»;
► <ifгаше id="video_yt_player" type="text/ht ml" width«"10«*и height ="100V' s г с=" ht t p,s,,:, ■;./ is vo.ut, u.be .сои/ е.и.Ье d с aus. 7II hVJ rj ''.'P enableisapi = iaautoplav = l&sta--tro=Q&origin=https : ■ k. coa&-fs = iarel = QScc load polic.=Q5iv load polic . =3" •frameborder="0" allowfullscreen="true">..</rfraBie>
Рис. i. Скриншот кода элемента Интернет-страницы со ссылкой на «YouTube»
На рис. i видна последовательность контейнеров <div>, которая хорошо показывает, как популярна сейчас стала блочная верстка Интернет-страниц. Саму ссылку можно увидеть внутри тега <iframe>. Как видно из рисунка, получить такую ссылку, а значит, и само видео, не представляет никаких затруднений.
Совершенно другой случай, когда видео хранится на сервере «ВКонтакте». Для получения такой ссылки придется воспользоваться специальными средствами. Получать скрытые ссылки со страниц различных сайтов позволяет, например, сервис «SaveFrom.net» (http://ru.savefrom.net). На рис. 2 можно увидеть список сайтов, доступных для обработки с целью получения скрытых ссылок.
Воспользоваться данным сервисом очень легко. В верхней части окна доступно поле для ввода текста, в которое можно скопировать ссылку на страницу социальной сети с нужным нам видео (рис. з). Получить начальную ссылку можно, кликнув правой кнопкой мыши на нужном элементе и воспользовавшись функцией «копировать код видео».
Поддерживаемые ресурсы Как использовать сервис? 5avefrom.net ВКонтакте
Примечание: чтобы узнать особенности скачивания с определенного ресурса, щелкните по его названию
sendspace.com
pmvoutube.com metacafe.com Щ break.com
2 dailvmotion.com ¡3vimeo.com О sevenload.com
@ mail.ru О smotri.com Я yandexru
@ гатЫег.ш @ tvigle.ru й intv.ru
И facebook.com livejoumal.com □ vk.com
Н odnoklassniki.ru* □ soundcloud.com (Щ liveinternet.ru
guitar-tube.com ЕЗ gametrailers.com м twitch.lv
zaycev.net И 1tv.ru ® rutv.ru
1*3 ntv.ru "> vesti.ru □ mreporter.ru
Ез karusel-tv.ru О autoplustv.ru 0 russia.ru
Ё0 amik.ru @ a1tv.ru
Рис. 2. Сайты, обрабатываемые сервисом «SaveFrom.net»
Просто вставь ссылку
Рис. 3. Окно для ввода ссылки на страницу с видео
Если все сделано правильно, то рядом со ссылкой «скачать» будут указаны формат и качество скачиваемого видео, например «МР4 720», «МР4 480», «МР4 360» или «МР4 240». Но часто случается, что доступно любое качество, кроме самого лучшего. Вместо этого сервис предлагает установить дополнительное программное обеспечение.
Попробуем самостоятельно с помощью изучения кода нужного элемента выделить ссылку на видеофайл нужного качества. При этом код будет выглядеть приблизительно так, как представлено на рис. 4.
I_=г
Рис. 4. Код элемента, содержащий ссылку на видео
Для разбора кода и написания парсера нам понадобятся следующие части представленного на рис. 4 выражения:
1) иг1240=Ы^ %зА %2F %2Fcs508301.vk.me %2Fз %2Fu5l59l8l7 %2Fvideos %2Fa429dc616a.240.mp4
2) ur1з6o=https %зА %2F %2Fcs508301.vk.me %2Fз %2Fu5l59l8l7 %2Fvideos %2Fa429dc616a.360.mp4
3) иг1480=Ы^ %зА %2F %2Fcs508307.vk.me %2Fз %2Fu5l59l8l7 %2Fvideos %2Fa429dc616a.480.mp4
4) иг1720=Ы^ %зА %2F %2Fcs508307.vk.me %2Fз %2Fu5l59l8l7 %2Fvideos %2Fa429dc616a.720.mp4
Для работы с данными из \htm1 файла (который мы предварительно сохранили на диск) как с единым текстовым массивом воспользуемся функцией fi1e_get_contents(). Реализуем собственную функцию ParseVideo72o(), код которой представлен на рис. 5.
$рагяе зЬг= 1 / (иг 1720=) (11С.Ърз%ЗА*2Г%2Г\ьг+\ .те%2Г.+*2Г\w+Ч2Fvideos*2F\.720\ .гар4)/и1' ;
Рис. 5. Функция, реализующая синтаксический разбор текста в соответствии с регулярным выражением
Всю основную работу по разбору текста выполняет следующее регулярное выражение:
/(иг1720=)№^ %3А %2F %2F\w+\.vk\.me %2F.+ %2F\w+ %2Fvideos %2F\w+\.720\.mp4)/Ui
Проведем разбор основных моментов этого выражения:
1) «/» - прямой слеш - это символ-разделитель, обозначающий начало и конец регулярного выражения;
2) (иг1720=) - в скобках указываются все внутренние регулярные выражения. В нашем примере всего их будет три, т.к. самым первым (с индексом «0») считается все выражение целиком;
3) «^» - так называемый «словесный» метасимвол общего назначения. Подразумевает возможность использования букв, цифр и знака «_» (подчеркивание);
4) «+» - плюс - количественный метасимвол, сообщающий нам о том, что символ, стоящий перед ним, может повторяться один и более раз. То есть выражение «^+» означает непустую строку, в которой любая буква (или цифра, или символ подчеркивания) может повторяться произвольное количество раз;
5) «.»- метасимвол точка обозначает любой одиночный символ;
6) «\.» - если перед точкой ставится обратный слеш, то это обозначает просто точку, которая встречается в выражении;
7) модификатор «и» делает все количественные метасимволы «не жадными», т.е. они не стремятся захватить как можно больше текста;
8) модификатор «1» запрещает функции, разбирающей регулярное выражение, различать большие и маленькие буквы.
Результат разбора текста нашей функцией в виде массива из трех строк можно увидеть на рис. 6.
Мы убедились в том, что разбор файла работает корректно и искомая гиперссылка получена нами в третьем элементе массива (с индексом «2»), выданного на экран. Но есть небольшая хитрость. Некоторые элементы строки заменены на спецсимволы. Например, «%зА» - это двоеточие, а «%2F» - прямой слеш. Чтобы отобразить на экране корректную ссылку, напишем еще одну функцию, производящую нужные замены. Пример подобной функции приведен на рис. 7.
(
[Q] => Array (
[0] => \irl?Z0=https%3A!!2F^2FC350e30?.ViC.ixie%2r3i2Fu51S9iei7%2rvi<aeO3%2F€i429(Sc616ei.720,nip1
[1] => ur 1720 =
[2] => https%3 At2Fi;2Fcs5033 07. vk.me%2F3i[2Fu51591617i;2Fvideosi;2Fa429dc616a. 72 0.rnp4
)
Рис. 6. Результат работы функции ParseVideo72o() в окне браузера
Stext = pregreplace(isearch^ Sreplace, $data);
Рис. 7. Функция, производящая замену спецсимволов
На рис. 8 можно увидеть результат работы созданной нами функции, которая возвращает корректную гиперссылку в привычном нам формате.
Array
(
[0] => Array (
[0] => ur 1720=11^3* 3A*2F*2Fcs5083 07 . vie. me* 2 F3%2 Fu51591317*2 Fvideos%2Fa429dc 61 ба. 72 □. mp4
[1] => ur1720=
[2] => https*3A*i2F%2Fcs508307.vk.me%2F3*2Fu51591817!(2Fvideos%2Fa42 9dc616a.72 0.mp4
i
https://cs508307.vk. me/3/u51591817todeos/a429dc616a.720.mp4
Рис. 8. Результат работы функции Change() в окне браузера
Скопировав полученную ссылку в любой менеджер закачек, например, бесплатный «Download Master», произведем копирование необходимого видеофайла на жесткий диск компьютера. Аналогичного результата мы достигнем, если сохраним файл непосредственно в окне браузера.
По этой же схеме можно выполнить разбор текста, создав регулярные выражения для закачки видео в нужном нам качестве, выбрав любой вариант из предложенных выше.
Список литературы
1. Прохоренок, П. А. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера / П. А. Прохоренок, В. А. Дронов. - 4-е изд., перераб и доп. - СПб. : БХВ-Петербург, 2015. - 768 с.
2. Никсон, Р. Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript и CSS / Р. Никсон. - 2-е изд. - СПб. : Питер, 2013. - 560 с.
3. Янк, К. PHP и MySQL. От новичка к профессионалу / Кевин Янк. - М. : Эксмо, 2013. - 384 с.
4. Лавреш, И. И. Совершенствование технологии работы с внешними источниками информации из социальных структур в системах поддержки принятия решений / И. И. Лавреш, А. В. Трифонов // Известия высших учебных заведений. Поволжский регион. Технические науки. -2015. - № 4 (36). - С. 27-36.
Абрамова Татьяна Алфиевна
старший преподаватель, кафедра экономической кибернетики, Пензенский государственный университет E-mail: [email protected]
Abramova Tat'yana Alfievna
senior lecturer,
sub-department of economic cybernetics, Penza State University
УДК 004.624 Абрамова, Т. А.
Разработка парсинг-системы для получения скрытых ссылок со страниц социальных сетей /
Т. А. Абрамова // Вестник Пензенского государственного университета. - 2016. - № 3 (15). - С. 41-47.