Парсинг web-страниц на php


В этом нелегком деле нам поможет PHP Simple HTML DOM Parser.

Самая последняя версия доступна на sourceforge.net.

На сегодняшний день последней является версия 1.5. Её и будем скачивать:

wget -O simplehtmldom_1_5.zip http://downloads.sourceforge.net/project/simplehtmldom/simplehtmldom/1.5/simplehtmldom_1_5.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fsimplehtmldom%2Ffiles%2Fsimplehtmldom%2F1.5%2F\&ts=1433252429\&use_mirror=softlayer-ams

Скачали, распаковываем в папку, которая доступна по вэбу, допустим /var/www/html/webparser:

mkdir /var/www/html/webparser
mv simplehtmldom_1_5.zip /var/www/html/webparser/
cd /var/www/html/webparser
unzip simplehtmldom_1_5.zip

Исходя из примера на странице парсера при вызове файла со следующим содержанием будут выведены все объекты img на главной странице mysite.com

<?php
include('simple_html_dom.php');
$html = file_get_html('http://www.mysite.com/');

foreach($html->find('img') as $element) 
       echo $element->src . '<br>';
?>

При вызове файла со следующим содержанием будут выведены все сслыки с главной страницы сайта mysite.com

<?php
include('simple_html_dom.php');

$html = file_get_html('http://www.mysite.com/');

foreach($html->find('a') as $element) 
       echo $element->href . '<br>';
?>

Даже не пробуйте делать var_dump($element), поскольку это приведет в зависанию вашего компьютера и/или сервера, на котором Вы развернули парсер.

Вооружившись тестовыми данными я решил попарсить песочницу хабра. Следующий код выведет первые десять постов:

<?php
include('simple_html_dom.php'); 

$html = file_get_html('http://habrahabr.ru/sandbox/');

$cnt = 10;
foreach($html->find('.post') as $post) {
    foreach($post->find('h1') as $header) {
        echo str_replace('a href="','a href="http://habrahabr.ru',$header->find('a')[0]) . '<br>';
        $cnt--;
    }
    if ($cnt <= 0){
        break;
    }
}
?>

Обработка ссылок с тэгом h2 на примере tecmint.com:

<?php
include('simple_html_dom.php'); 

$html = file_get_html('http://www.tecmint.com/');

foreach($html->find('h2') as $post) 
        echo $post->find('a')[0] . '<br>';
?>

Пример результатов можно посмотреть на следующей странице:
http://www.tech-notes.net/news-from-other-websites/

(хабр почему-то подглючивает)

Share Button
(Visited 319 times, 1 visits today)

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

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