Парсинг Сервис

Php парсер html контента сайта пример бесплатного парсера сайтов.

Решил привести статью в актуальный вид. Ранее на данной странице был представлен универсальный парсер HTML страниц на PHP. Но прошло уже более 4 лет, я наработал больше опыта в области разработки парсеров. И решил выложить новый пример PHP парсера с детальным разбором алгоритма работы.


Парсер прошлой версии носил гордое звание универсального, но это было весьма условное обозначение. Скрипт имел много ограничений, для его полноценного использования требовались знания в регулярных выражениях на PHP и JS.

Я подумал, подумал и решил, что более универсальным решением будет показать пример парсера на PHP и рассказать, как он работает. Так программисты, которые ранее не писали парсеров смогут решить свои задачи. А заказчики смогут понять возможности PHP в области парсинга сайтов и что реально можно требовать от программистов.

Парсер — это программа, которая анализирует входные текстовые данные, извлекает нужную информацию и на основе полученных данных выдаёт результат в заданном формате.

Общий алгоритм PHP парсинга предполагает, что ваш скрипт делает запрос по заданному адресу, получает ответ от сервера в виде HTML страницы, либо в каком-то другом текстовом формате, например CSV, JSON, XML. Далее полученная информация анализируется, из неё извлекаются (парсятся) нужные данные, на основе которых формируется результат. Полученные данные можно вывести на экран, либо записать в файл или БД.

Пример простого PHP парсера html контента

Предположим нам нужно спарсить цену на товары на сайте gearbest. Скрипт считывает заданную страницу, потом посредством регулярных выражений анализирует её контент и выделяет нужные нам куски HTML кода. Далее полученный результат выводится на экран.

/Us"";
$buffer = array();
preg_match($regexp, $page, $buffer);
$res_arr['price_list']['currency'] = $buffer[1];
$res_arr['error'] = '';
} else {
$res_arr['price'] = 0;
$res_arr['currency'] = 'nodata';
$res_arr['error'][] = 'Ошибка загрузки страницы';
}
return $res_arr;
}
/* --- 1.4 --- Вывод данных в HTML */
/* --- 1.4.1 --- Вывод полученых цен */
function price_list_html($price_list) {
echo '

Цена: ' . $price_list['price'] . ' ' . $price_list['currency'] . '

';
}
/* --- 1.4.2 --- Вывод ошибок */
function error_list_html($error) {
if (!empty($error)) {
echo ""

Во время обработки запроса произошли следующие ошибки:

\n"";
echo ""\n"";
foreach($error as $error_row) {
echo ""
"" . $error_row . ""
\n"";
}
echo ""\n"";
echo ""

Статус: FAIL

\n"";
} else {
echo ""

Статус: OK

\n"";
}
}
/* --- 1.4.3 --- Вывод ошибок загрузки страниц */
function error_page_list_html($error_page) {
if (!empty($error_page)) {
echo ""\n"";
foreach($error_page as $error_row) {
echo ""
["" . $error_row[0] . ""] "" . $error_row[1] . "" - "" . $error_row[2] . ""
\n"";
}
echo ""\n"";
}
}
/* --- 1.4.4 --- Вывод работы скрипта */
function run_time_html($time_start) {
if(!empty($time_start))
echo ""Время работы: "" . (time() - $time_start) . ""\n"";
}
/* --- 2 --- Получение контента из каталога Gearbest */
if($action) { // если ошибок нет и данные формы поиска получены
if(!empty($gearbest_url)) {
$gearbest_url = trim($gearbest_url);
$din_url =  $gearbest_url;
$res_arr = get_gearbest_price($din_url);
$price_list = $res_arr['price_list'];
$error_page = $res_arr['error_page'];
$error = $res_arr['error'];
} else {
$error[] = ""Не задан адрес страницы с товаром"";
}
}
/* --- 3 --- Вывод результатов работы парсера */
?>
Парсер цены товара на Gearbest
.wrapper {
max-width: 600px;
margin: 0 auto;
}
h1 {
text-align: center;
}
.action_form {
max-width: 560px;
margin: 0 auto;
}
.action_form input {
width: 100%;
}
input[type=""text""] {
font-size: 1em;
min-height: 36px;
box-sizing: border-box;
}
input[type=""submit""] {
padding: 8px 12px;
margin: 12px auto;
font-size: 1.2em;
font-weight: 400;
line-height: 1.2em;
text-decoration: none;
display: inline-block;
cursor: pointer;
border: 2px solid #007700;
border-radius: 2px;
background-color: transparent;
color: #007700;
}
input[type=""submit""]:hover {
background-color: #009900;
color: #fff;
}
.result {
border: 1px dotted #000;
width: 100%;
height: auto;
overflow-y: auto;
margin: 0px auto;
padding: 10px;
}
.copyright {
text-align: center;
}
.copyright a {
color: #000;
}
.copyright a:hover {
text-decoration: none;
}
.red {
color: #770000;
}
.green {
color: #007700;
}
Парсер цены товара на Gearbest
© Идея и реализация - ПЧ // 16.04.2017 г.

index.php — основной файл PHP скрипта парсера. Код парсера актуален на момент публикации. Со временем HTML код сайта источника может меняться и регулярные выражения уже не будут к нему подходить.

Существуют разные способы установки скрипта. Я работал с ним из-под XAMPP. Но можно парсер запускать прямо с виртуального хостинга. Просто заливаете файл index.php к себе на сайт в какую-либо папку и обращаетесь к нему через адресную строку браузера. Предположим, что вы закинули скрипт в папку my-parser в корневой директории вашего хостинга. Тогда в адресной строке нужно набрать URL: вашдомен/my-parser/.

Скриншот главной страницы парсера цены с сайта gearbest:


1. На главной странице парсера мы должны ввести адрес страницы товара. После нажатия на кнопку «Старт» страница перезагружается, отправляются данные формы на сервер и PHP скрипт делает запрос по заданному адресу с помощью библиотеки cURL.

За это действие отвечает функция curl_get_contents(), которая является аналогом стандартной PHP функции file_get_contents(), но с расширенным на основе cURL функционалом.
cURL — это расширение для PHP, которое обеспечивает поддержку библиотеки функций libcurl. Данный набор функций позволяет формировать POST и PUT запросы, скачивать файлы. Поддерживаются различные протоколы http, https, ftp и пр. Можно использовать прокси-серверы, cookies и аутентификацию пользователей. В общем, отличный инструмент для имитации действий пользователя в браузере.

cURL штука для разработки HTML парсеров очень полезная, и в одной из следующих статей я более подробно расскажу о приёмах работы с ней для целей парсинга.

2. Далее в функции get_gearbest_price() с помощью встроенной в PHP функции preg_match() и регулярных выражений проводится анализ ответной HTML страницы, полученной от стороннего сервера.

Обратите внимание, что скрипт видит страницу в текстовом формате и анализировать предстоит именно её HTML код.

3. На следующем этапе формируется и выводится на экран результат, полученный на основе данных после парсинга. В нашем случае это валюта и цена товара.

Таким образом, для успешной разработки парсеров на PHP программисту нужно уметь работать с библиотекой функций cURL и регулярными выражениями PHP.

Как парсить зашифрованные данные

В некоторых случаях сервера отдают HTML страницы в сжатом или защифрованном виде, например Accept-Encoding: gzip. При этом смена поддерживаемых форматов сжатия в запросе может не влиять на формат ответа.

В таких случаях нужно расшифровать ответ, например, стандартной PHP функцией gzdecode(). И дальше можно будет работать по старой схеме.

Данные, заширфованные по алгоритму base64 можно расшифровать функцией base64_encode().

PHP парсер HTML сайта бесплатно

Собственно ответ на вопрос, где взять PHP парсер сайтов бесплатно, простой — напишите его сами. Базовый алгоритм работы парсеров я выше разобрал в деталях.

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

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

Итоговая стоимость услуг разработки определяется после получения конкретного технического задания. Цена устанавливается строго перед началом выполнения работы, в ходе рабочего процесса финансовые условия не изменяются. Работаю по 100% предоплате. Минимальный заказ составляет 2000 рублей.

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

В этом случае формально тоже можно получить парсер для себя бесплатно. Например, цена разработки парсера получилась 9 000 рублей. Вы ищете 9 человек с аналогичной проблемой и собираете с них по 1000 рублей, заказываете разработку парсера. Потом делаете 10 копий, 1 себе и 9 отдаёте вашим знакомым.

В следующем цикле статей я покажу примеры реализации более сложных парсеров с авторизацией, сбор фото, работа с AJAX, парсинг ВК и т.п.

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

4
/
5
(
5
голосов
)
Не жмись! С друзьями ссылкой поделись:
Интересное по теме
Парсер данных, подгруженных на страницу асинхронно
СДЛ in Reality или прибыльный сайт за 100 дней и ночей
PHP парсер с авторизацией
Парсер лайков из ВКонтакте
Практическое руководство «Парсеры HTML на PHP»
Опубликовано 29.12.201209.04.2019Рубрики Мои проекты
13 thoughts on “Парсер html контента сайта на PHP”
Наталья:
30.12.2012 в 21:30

С наступающим!
Так он из вконтакта сразу умеет парсить, или доработка нужна?

Ответить
Сергей:
21.08.2014 в 19:44

Здравствуйте
Хотелось бы обговорить настройку парсера вашими силами. Как будете свободны напишите мне.

Ответить
Александр:
01.10.2014 в 14:13

Здравствуйте, вы ещё занимаетесь парсером? Хотел бы прибегнуть к вашим услугам.

Ответить
Seorubl:
01.10.2014 в 19:38

Здравствуйте, отпишитесь по своей задаче мне на почту.

Ответить
Степан:
25.11.2014 в 23:40

Добрый день. Возможно ли написание парсера под конкретные задачи? Можем ли мы списаться по почте? Спасибо!

Ответить
Seorubl:
26.11.2014 в 10:19

Здравствуйте!
Можете написать мне на почту или через форму обратной связи в контактах.

Ответить
Коля:
27.02.2015 в 13:26

Минус, парсер работает без проксей, многие сайты блокируют на частые запросы.

Ответить
Seorubl:
27.02.2015 в 13:53

Пока не сталкивался в своей практике с необходимостью работать через прокси. Хотя, действительно, такие задачи встречаются. Конкретно этот парсер был разработан, без особого прикладного смысла, чисто показать общий алгоритм действий. В ближайшее время планирую выложить наработки по парсингу различных сайтов, в том числе с помощью cURL, с авторизацией и с распознаванием капчи.

Ответить
Дмитрий Сергеевич:
02.03.2015 в 22:54

Доброго времени суток! Как я понял, вы можете выполнить задание любой сложности… не могли бы Вы со мной связаться по e-mail, хотелось бы детально обговорить кое-какие моменты по парсингу информации с одного сайта, а так же узнать цену за работу.

Ответить
ПЧ:
03.03.2015 в 00:13

Напишите мне на почту, на странице «Контакты». Цены и сроки работ смогу оценить после ознакомления с ТЗ.

Ответить
Сергей:
14.03.2015 в 09:33

А можно ли у Вас заказать парсер вк + что бы он сразу импортировал контент в базу данных?

Ответить
Seorubl:
14.03.2015 в 23:36

Можно, вышлите подробное тех. задание мне на почту.

Ответить
ВЛАД:
03.04.2020 в 12:52

Спасибо большое! Дай Бог здоровья!

Ответить
Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Комментарий

Комментарий

Сообщите мне о появлении новых комментариев по электронной почте

Имя *

Email *

Сайт