Парсинг HTML и скрепинг с помощью простой библиотеки HTML DOM. Парсер на PHP – это просто PHP парсинг файла в массив с помощью file()


Вы узнаете, как получить список всех статей, опубликованных на сайте.

Шаг 1. Подготовка

В первую очередь нужно скопировать библиотеку simpleHTMLdom , которая доступна на сайте

В архиве для загрузки хранятся несколько файлов, но вам нужен только один simple_html_dom.php . Все остальные файлы - это примеры и документация.

Шаг 2. Основы парсинга

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

$html = new simple_html_dom();
// Загрузка из строки
$html->load("

Hello World!

");
// Загрузка файла
$html->load_file("http://net.tutsplus.com/");

Вы можете создать исходный объект загрузив HTML либо из строки, либо из файла. Загрузка из файла может быть выполнена либо через указание URL , либо из вашей локальной файловой системы.

Примечания: Метод load_file() делегирует работу функции PHP file_get_contents . Если allow_url_fopen не установлен в значение true в вашем файле php.ini , то может отсутствовать возможность открывать удаленные файлы таким образом. В этом случае вы можете вернуться к использованию библиотеки CURL для загрузки удаленных страниц, а затем прочитать с помощью метода load() .

Доступ к информации

Как только у вас будет объект DOM, вы сможете начать работать с ним, используя метод find() и создавая коллекции. Коллекция - это группа объектов, найденных по селектору. Синтаксис очень похож на jQuery.



Hello World!


We"re Here.




В данном примере HTML мы собираемся разобраться, как получить доступ к информации во втором параграфе, изменить ее и затем вывести результат действий.

1. # создаем и загружаем HTML
2. include("simple_html_dom.php");
3. $html = new simple_html_dom();
4. $html->load(“

Hello World!

“);
5. # получаем элемент представляющий второй параграф
6. $element = $html->find(“p“);
7. # модифицируем его
8. $element->innertext .= “ and we"re here to stay.“;
9. # Выводим!
10. echo $html->save();

Строки 2-4 : Загружаем HTML из строки, как объяснялось выше.

Строка 6 : Находим все тэги

В HTML, и возвращаем их в массив. Первый параграф будет иметь индекс 0, а последующие параграфы индексируются соответственно.

Строка 8 : Получаем доступ ко второму элементу в нашей коллекции параграфов (индекс 1), добавляем текст к его атрибуту innertext. Атрибут innertext представляет содержимое между тэгами, а атрибут outertext представляет содержимое включая тэги. Мы можем заменить тэг полностью, используя атрибут outertext.

Теперь добавим одну строку и модифицируем класс тэга нашего второго параграфа.

$element->class = "class_name";
echo $html->save();

Окончательный вид HTML после команды save будет иметь вид:



Hello World!


We"re here and we"re here to stay.



Другие селекторы

Несколько других примеров селекторов. Если вы использовали jQuery, все покажется вам знакомым.

# получаем первый найденный элемент с id=“foo“
$single = $html->find("#foo", 0);
# получаем все элементы с классом “foo“
$collection = $html->find(".foo");
# получаем все теги ссылок на странице
$collection = $html->find("a");
# получаем все теги ссылок, которые расположены внутри тега H1
$collection = $html->find("h1 a");
# получаем все теги img с title="himom"
$collection = $html->find("img");

Первый пример требует пояснений. Все запросы по умолчанию возвращают коллекции, даже запрос с ID, который должен вернуть только один элемент. Однако, задавая второй параметр, мы говорим “вернуть только первый элемент из коллекции”.

Это означает, что $single - единичный элемент, а не не массив элементов с одним членом.

Остальные примеры достаточно очевидны.

Документация

Полная документация по библиотеке доступна на .

Шаг 3. Пример из реального мира

Для демонстрации библиотеки в действии мы напишем скрипт для скрепинга содержимого сайта net.tutsplus.com и формирования списка заголовков и описания статей, представленных на сайте….только в качестве примера. Скрепинг относится к области трюков в веб, и не должен использоваться без разрешения владельца ресурса.

Include("simple_html_dom.php");
$articles = array();
getArticles("http://net.tutsplus.com/page/76/");

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

Так же объявим глобальный массив, чтобы сделать проще сбор все информации о статьях в одном месте. Прежде чем начинать парсинг взглянем, как описывается статья на сайте Nettuts+.



...


Title




Description



Так представлен основой формат поста на сайте, включая комментарии исходного кода. Почему важны комментарии? Они подсчитываются парсером как узлы.

Шаг 4. Начало функции парсинга

function getArticles($page) {
global $articles;
$html = new simple_html_dom();
$html->load_file($page);
// ... Дальше...
}

Начинаем с объявления глобального массива, создаем новый объект simple_html_dom , и затем загружаем страницу для парсинга. Данная функция будет рекурсивно вызываться, поэтому устанавливаем для нее в качестве параметра URL страницы.

Шаг 5. Находим ту информацию, которая нам нужна

1. $items = $html->find("div");
2. foreach($items as $post) {
3. # помним про учет комментариев в качестве узлов
4. $articles = array($post->children(3)->outertext,
5. $post->children(6)->first_child()->outertext);
6. }

Это суть функции getArticles . Нужно разобраться более детально, чтобы понять, что происходит.

Строка 1 : Создаем массив элементов - тег div с классом preview. Теперь у нас есть коллекция статей, сохраненная в $items .

Строка 4 : $post теперь ссылается на единичный div класса preview. Если мы взглянем в оригинальный HTML, то увидим, что третий элемент потомок - это тег H1 , который содержит заголовок статьи. Мы берем его и присваиваем $articles .

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

Строка 5 : Шестой потомок $post - это

. Нам нужен текст описания из него, поэтому мы используем outertext - в описание будет включен тег параграфа. Единичная запись в массиве статей будет выглядеть примерно так:

$articles = “Заголовок статьи“;
$articles = “This is my article description“

Шаг 6, Работа со страницами

первым делом нужно определить, как найти следующую страницу. На сайте Nettuts+ о номере страницы очень легко догадаться по URL, но нам нужно получать ссылку в парсинге.

Если посмотреть на HTML, то можно найти следующее:

»

Это сслыка на следующую страницу, и мы можем легко ее найти по классу ‘nextpostslink ’. Теперь эта информация может быть использована.

If($next = $html->find("a", 0)) {
$URL = $next->href;
$html->clear();
unset($html);
getArticles($URL);
}

В первой строке мы проверяем, можно ли найти ссылку с классом nextpostslink . Отметим использование второго параметра в функции find() . Таким образом мы указываем, что хотим получить первый элемент (индекс 0) в возвращаемой коллекции. $next содержит единичный элемент, а не коллекцию.

Затем мы присваиваем ссылку HREF переменной $URL. Это важно, потому, что далее мы удаляем объект HTML. Чтобы предотвратить утечку памяти в php5, текущий объект simple_html_dom должен быть очищен и разустановлен, прежде чем другой объект будет создан. Если этого не сделать, то вся доступная память может быть поглощена.

В завершение, мы вызываем функцию getArticles с URL следующей страницы. Рекурсия прерывается, когда не остается страниц для парсинга.

Шаг 7. Вывод результатов

Первое, мы собираемся установить несколько основных стилей. Все абсолютно произвольно - вы можете устанавливать то, что нравится.

#main {
margin:80px auto;
width:500px;
}
h1 {
font:bold 40px/38px helvetica, verdana, sans-serif;
margin:0;
}
h1 a {
color:#600;
text-decoration:none;
}
p {
background: #ECECEC;
font:10px/14px verdana, sans-serif;
margin:8px 0 15px;
border: 1px #CCC solid;
padding: 15px;
}
.item {
padding:10px;
}

Затем мы пишем маленькую функцию на PHP в странице для вывода предварительно сохраненной информации.

foreach($articles as $item) {
echo "

";
echo $item;
echo $item;
echo "
";
}
?>

Окончательный результат - это одна страница HTML со списком всех статей со страниц Nettuts+, начиная с той, которая была указана в первом вызове getArticles() .

Шаг 8. Заключение

Если Вы запускаете парсинг для большого количества страниц (скажем, весь сайт), то это может занять много времени. На таком сайте как Nettuts+, который имеет боле 86страниц, процесс парсинга может длиться более минуты.

Данный урок открывает для вас тему парсинга HTML. Существуют другие методы методы работы с DOM, которые позволяют работать с селектором xpath для поиска элементов. Описанная в данном уроке библиотека проста для использования и отлично подходит для быстрого старта. Помните, что нужно спрашивать разрешения, прежде проводить скрепинг сайта.

Вебмастеры часто сталкиваются с такой проблемой, когда нужно взять с какого-либо сайта определенную информацию и перенести ее на другой. Можно сначала сохранить информацию на промежуточный носитель, а уже с него загрузить куда-либо, но подобный подход не всегда удобен. В некоторых случаях гораздо быстрее залить парсер на сам сайт, поддерживающий PHP и запустить его удаленно, чтобы он автоматически спарсил информацию и загрузил ее в базу данных ресурса.
Среди уже готовых решений имеются популярные вроде Content Downloader и ZennoPoster, они конечно очень удобны и понятны любому человеку, даже незнакомому с программированием, однако имеют некоторые минусы. К примеру, они платные и не обладают достаточной гибкостью, которую можно вдохнуть в обычный php скрипт. Тем более, что разработка сложного парсера на них нисколько не уступает по времени написанию аналога на php.
Еще есть такая бесплатная вещь как iMacros – скриптовый язык, который может эмулировать действия пользователя в браузере, но тоже не везде такой подход работает лучшим образом.

Многие думают, что программирование, и уж тем более написание парсеров, – очень сложное занятие. На самом деле php – один из самых простых языков, изучить который можно на достаточном уровне за пару недель или месяц.
Парсеры тоже просты в написании, именно поэтому начинающие программисты пишут именно их, чтобы освоить язык.
Первое, что приходит на ум человеку, который решил написать подобный скрипт, - нужно использовать функции для работы со строками (strpos, substr и аналогичные) или регулярные выражения. Это совершенно верно, однако есть один нюанс. Если парсеров нужно будет писать много, то придется разрабатывать свою библиотеку, чтобы не переписывать сто раз одни и те же конструкции, но на это уйдет тонна времени, а учитывая то, что уже существуют аналогичные библиотеки, такое занятие и вовсе оказывается бессмысленным.
Идеальным вариантом для новичка станет изучение библиотеки PHP Simple HTML DOM Parser. Как можно догадаться из названия, она очень проста в освоении. Рассмотрим базовый код:

$html = file_get_html("http://www.yandex.ru");
$a_links = $html->find("a");

Первая строка создает объект страницы, источником которой в данном случае является Яндекс, и записывает в переменную $html, которая имеет несколько функций, например find. Find – ищет элемент по какому-либо параметру, например find (‘a’) – вернет массив всех ссылок страницы. Find(‘#myid’) – вернет массив элементов, id которых равен "myid".
Доступ к параметру href первой попавшейся ссылки осуществляется так:

Echo $a_links[ 0 ]->href;

Более подробно можно посмотреть на сайте:
simplehtmldom.sourceforge.net

Библиотека, как уже было сказано выше, очень проста и лучше всего подходит для начинающего программиста, плюс ко всему она работает достаточно быстро и не сильно требовательна к ресурсам сервера.
Есть у этой библиотеки один минус – далеко не все страницы ей оказываются по зубам. Если какой-либо элемент не отображается, но точно известно, что он там есть, лучше воспользоваться библиотекой DOM (Document Object Model). Она хороша во всем, кроме скорости разработки и понятности.

$doc = new DOMDocument();
$doc->loadHTML ($data);
$searchNodes = $doc->getElementsByTagName("a");
echo $searchNodes[ 0 ]->getAttribute("href");

Этот скрипт создает сначала объект типа DOM, при этом в переменной $data должен находиться код страницы. Затем находит все теги a (ссылки), с помощью вызова $doc->getElementsByTagName, затем записывает их в массив $searchNodes. Доступ к параметру href первой ссылки на странице осуществляется с помощью вызова $searchNodes[ 0 ]->getAttribute("href").
В итоге скрипт получается более громоздкий, и писать его уже не так удобно, но иногда приходится использовать именно эту библиотеку.

Теги: php, парсер, программирование

Потихоньку изучаю возможности PHP для создания парсеров. Я уже писала о том, как парсить . Сейчас расскажу об одном из способов парсинга html (он подойдет и для xml тоже, кстати). Повторю, что в php я не гуру, поэтому буду очень признательна, если вы оставите свои комментарии к поднятой теме.

Побродив по нашим и англоязычным форумам, поняла, что спор о том, лучше ли парсить html регулярными выражениями или использовать для этих целей возможности PHP DOM , является холиваром. Сама же я пришла к выводу, что все зависит от сложности структуры данных. Ведь если структура достаточно сложная, то с помощью регулярок приходится парсить в несколько этапов: сначала выделить большой кусок, потом разделить его на более маленькие и т.д.. В итоге, если данные сложные (или их очень много), то процесс парсинга может значительно затянуться. Ресурсоемкость в этом случае еще будет зависеть, конечно же, от самих регулярных выражений. Если в регэкспах много ".*" (они являются самыми ресурсоемкими, т.к. "прочесывают" исходный код с максимальной жадностью), то замедление будет заметным.

И вот как раз в этом-то случае как нельзя кстати приходится PHP DOM. Это удобный инструмент для парсинга как XML, так и HTML. Некоторые придерживаются мнения, что парсить html регэкспами вообще нельзя, и яростно защищают PHP DOM.

В свою очередь я ознакомилась с этим расширением, написав простенький скрипт. Который и привожу здесь, чтобы наглядно показать, как это все легко и просто. В примере разбирается html с частью карты сайта этого блога. Он присвоен переменной прямо внутри кода. В "боевых" же условиях исходные данные следует получать, например, через file_get_contents().


$html = "
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

сайт Map


Последние темы блога















http://сайт/2009/08/blog-post_06.html Базы
MySQL и Delphi. Express-метод
http://сайт/2009/08/blog-post.html Пост о том, что лучше сто раз проверить



";
/** создаем новый dom-объект **/
$dom = new domDocument;

/** загружаем html в объект **/
$dom->loadHTML($html);
$dom->preserveWhiteSpace = false;

/** элемент по тэгу **/
$tables = $dom->getElementsByTagName("table");

/** получаем все строки таблицы **/
$rows = $tables->item(0)->getElementsByTagName("tr");

/** цикл по строкам **/
foreach ($rows as $row)
{
/** все ячейки по тэгу **/
$cols = $row->getElementsByTagName("td");
/** выводим значения **/
echo $cols->item(0)->nodeValue."
";
echo $cols->item(1)->nodeValue."
";
echo "


";
}
?>

В результате после запуска скрипта получаем такую картину:

Upd: Без всякого сомнения, для более удобной работы со структурой HTML в PHP вам надо познакомиться с библиотекой

С недавних пор я работаю в компании ООО «Радио Сити Сахалин» в команде разработчиков и журналистов информационно-развлекательного портала «Ситисах ». Специально для футбольных фанатов на портале поддерживается раздел «Спорт » с новостями из мира футбола, турнирными таблицами и списком игроков команды ФК «Сахалин».

Сейчас портал переживает редизайн, поэтому разделом «Спорт» было поручено заняться мне. Основная моя функция в команде - вёрстка макетов нового дизайна. Иногда приходится решать и побочные задачи, дабы облегчить и без того нелёгкую работу нашего основного программиста. Сегодня я расскажу о «Микропарсере».

Ранее на портале футбольные турнирные таблицы заполнялись контент-менеджерами вручную. Известны случаи, когда результаты матчей появлялись на сайте Чемпионат.com быстрее, чем на нашем портале. Теперь же мы решили, наконец-то, сделать обновление таблиц автоматическим. Так как Чемпионат.com не предоставляет API (по крайней мере некоего открытого) для получения выводимых им турнирных таблиц, единственный выход - парсить.

Как использовать «Микропарсер»

«Микропарсер» состоит всего-навсего из одной функции - parse_site(array $sites, array $defaults = array()) . Первым аргументом передаётся массив сайтов (или страниц на одном сайте), которые необходимо распарсить, а вторым - массив настроек по умолчанию.

Массив $sites имеет следующий формат:

Array("zona_vostok" => array("url" => "http://www.championat.com/football/_russia2d/589/table/all.html", "xpath" => "some/x/path", //необязательный "xsl" => "absolute/path/to/xsl", //необязательный), "stackoverflow" => array("url" => "http://stackoverflow.com", "xpath" => "some/x/path", "transform" => false //необязательный));

Все ключи, кроме url - опциональны. В случае, если выражение XPath отсутствует, страница, указанная в значении ключа url , будет обработана полностью. Лист стилей XSL также можно подключить только в случае необходимости обработки «сырого» кода.

Обратите внимание на ключ "transform" => false . Он используется в том, случае, если массив $defaults содержит лист стилей XSL по умолчанию, но для данной страницы в трансформации нет необходимости.

Массив $defaults позволяет избежать копирования настроек в массиве $sites . Он может содержать только два ключа: xpath и xsl . Остальные ключи просто игнорируются.

Резюме

Написанный мной парсер состоит из одной функции с двумя параметрами (для частных и общих настроек), позволяет загружать страницу целиком или её отдельный фрагмент, а также, по желанию, обрабатывать результат таблицей стилей XSL.

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

Рабочий пример

Давайте рассмотрим турнирную таблицу чемпионата России по футболу во втором дивизоне, зона «Восток».

Поскольку нам необходимо «вытащить» со страницы непосредственно турнирную таблицу, выражение XPath будет следующим: //div[@id="section-statistics"]/table

Исходная таблица содержит много мусора: атрибуты, классы, инлайновые стили. Поэтому мы преобразим её в более приятный вид с помощью листа стилей XSL со следующим содержанием:

Команда Игры Победы Ничьи Проигрыши Мячи Очки
even odd

Теперь напишем код, чтобы вывести готовую турнирную таблицу.

$results = parse_site(array("zona_vostok" => array("url" => "http://www.championat.com/football/_russia2d/589/table/all.html", "xpath" => "xpath" => "//div[@id="section-statistics"]/table", "xsl" => __DIR__."/football.xsl")); print $results["zona_vostok"];

И на выходе получим вот такой код HTML:

...
Команда Игры Победы Ничьи Проигрыши Мячи Очки
1 Луч-Энергия 20 12 6 2 30-17 42
2 Чита 20 12 5 3 28-14 41

Скачать «Микропарсер»

Вот несколько способов заполучить «Микропарсер»:

  1. Форкните на Гитхабе: git clone https://github.com/franzose/microparser.git
  2. Скачайте архив:

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

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

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

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

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

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

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

/Us"; $buffer = array(); preg_match($regexp, $page, $buffer); $res_arr["price_list"]["currency"] = $buffer; $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 . "] " . $error_row . " - " . $error_row . "
  • \n"; } echo "
\n"; } } /* --- 1.4.4 --- Вывод работы скрипта */ function run_time_html($time_start) { if(!empty($time_start)) echo "\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.com

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

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

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

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

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

cURL штука для разработки 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 отдаёте вашим знакомым.

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

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