Простой способ парсинга сайтов

в 10:43, , рубрики: php, парсинг, метки: ,

Недавно мне потребовалось сделать небольшой парсер на php для интернет-магазина. Я не стал изобретать велосипед и взял стандартную библиотеку. Но тут наткнулся на неожиданную проблему — библиотека парсит только правильно сверстанные сайты. Мой таким не был. Выходом из этой проблемы оказалось использование ещё более громоздких библиотек в которых сам черт ногу сломит. Я бросил это дело и решил парсить обычными регулярными выражениями. Всё шло хорошо когда парсились простые строки вроде цены и заголовков, но как дело дошло до средних размеров текста в котором встречаются теги br, stong и другие появились сложности.

Заголовок и цены я парсил выражением /тег([^<]*)/im Но текст не строка — в нём могут быть тоже теги, причем какие я точно знать не могу. Можно конечно напрячься и создать всеописывающие выражение — но я сделал всё проще.

Нужный текст для парсиринга был заключен в теги <td></td>. С помощью функции explode('<td>',$html) я раздел страницу на две части. Далее нижнюю часть страницы я опять разделял на две части — explode('</td>',$html_down) и уже брал верхнюю часть. В итоге я получаю то что хотел — текст заключенный в теги <td> и </td>.

Вот код целиком:

$res = explode('<td>',$html,2);<br>
$res = explode('</td>',$res[1],2);<br>
$res = $res[0];	

Здесь $html — это исходная страница в которой нужно искать что-то, а $res — результат поиска.

Конечно это не идеально и не всякую страницу можно вот так распарисить.
Но если можно почему бы и нет?

P.S. Я не изобрел что-то новое — уверен кто-то до меня это уже использовал. Просто хотелось поделиться с вами своими мыслями.

Автор: Murloc

* - обязательные к заполнению поля