Код поиска информации(парсер)

Тема в разделе "PHP", создана пользователем badhack, 14 ноя 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. badhack

    badhack Писатель

    Регистр.:
    14 апр 2007
    Сообщения:
    46
    Симпатии:
    4
    Подскажите кусочек кода для парсинга инфы из html страницы, сохраненой на локальной машине.
    пример Перейти по ссылке
    нужно выудить название, раздел каталога, код товара, описание, картинка.
    Если есть, можно и готовый скрипт с возможностью импорта вытащеной информации в MySQL.
     
  2. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    То что на локальной, только упрощает задачу, скачал я так понимаю оффлайн експлорером? :)
    Тебе регулярками (regex) нужно пользоватся, с ними можешь искать текст по шаблону, для твоей задачи, два-три дня почитай мануал. Или фрилансер за пару десятков баксов сделает тебе это дело.
     
  3. Feed

    Feed Прохожие

    Код:
    <?php
    function getTitle( $string ) {
        $s = strpos( $string, "<title>" ) + 7;
        $e = strpos( $string, "</title>", $s );
        $l = $e - $s;
        return substr( $string, $s, $l );
    }
    
    function getSection( $string ) {
        $s = strpos( $string, '<table cellspacing="0" cellpadding="0" width="100%"><tr><td class="cbt" align="left">' ) + 85;
        $e = strpos( $string, "</tr></table>", $s );
        $l = $e - $s;
        $output = substr( $string, $s, $l );
        $output = strip_tags( $output );
        $output = explode( "/", $output );
        $section = "";
        $count = count( $output );
        for ( $i = 0; $i < $count; $i++ ) {
            if ( $i != ( $count - 1 ) ) {
                $section .= trim( $output[$i] ) . " -> ";
            }
            else {
                $section .= trim( $output[$i] );
            }
        }
        return $section;
    }
    
    function getArtNo( $string ) {
        $s = strpos( $string, "Код товара: <b>" ) + 15;
        $e = strpos( $string, "</b>", $s );
        $l = $e - $s;
        return substr( $string, $s, $l );
    }
    
    function getDescription( $string ) {
        $s = strpos( $string, 'method=post name="MainForm">' ) + 28;
        $e = strpos( $string, "<img", $s );
        $l = $e - $s;
        $output = substr( $string, $s, $l );
        $output = strip_tags( $output );
        $output = trim( $output );
        return $output;
    }
    
    function getImage( $string ) {
        $s = strpos( $string, '<div style="float:right;"align="center">' ) + 40;
        $s = strpos( $string, 'src="', $s ) + 5;
        $e = strpos( $string, '"', $s );
        $l = $e - $s;
        return "http://www.softair.su/" . substr( $string, $s, $l );
    }
    
    $file = file_get_contents( "http://www.softair.su/index.php?productID=150" );
    
    echo "Title: \r\n";
    echo getTitle( $file ) . "\r\n\r\n\r\n";
    echo "Section: \r\n";
    echo getSection( $file ) . "\r\n\r\n\r\n";
    echo "ArtNo: \r\n";
    echo getArtNo( $file ) . "\r\n\r\n\r\n";
    echo "Description: \r\n";
    echo getDescription( $file ) . "\r\n\r\n\r\n";
    echo "Image: \r\n";
    echo getImage( $file );
    ?>
    Результат обработки:
    Перейти по ссылке

    Код:
    Title: 
    Надувные диваны трансформеры BD 0012, с эл. насосом.
    
    
    Section: 
    Главная -> Надувные диваны и кресла
    
    
    ArtNo: 
    BD0012
    
    
    Description: 
    Надувной диван трансформер BD 0012, с насосом
    
    Уникальный многофункциональный надувной диван трансформер может использоваться в 5 вариантах: как классический удобный и практичный диван, двуспальное супружеское ложе со спинкой и без нее, высокая ортопедическая односпальная кровать для ребенка, шезлонг для двоих.
    В этом надувном диване все продумано до мелочей, в течении нескольких секунд его можно перевести из одного положения в другое. Все очень просто и понятно.
    Всего за минуту при помощи мощного электрического насоса работающего от сети 220В, надувной диван трансформер приводится в рабочее состояние. И если требуется, то этим же насосом можно полностью выкачать воздух.
    Многофункциональный надувной диван трансформер изготавливается из современного, прочного и практичного материала, который водонепроницаем, обладает устойчивостью к механическим нагрузкам и воздействию температур.
    Надувной диван трансформер всегда держит свою форму и не теряет упругости, очень устойчив и по настоящему удобен!
    Надувной диван соответствует всем стандартам качества! Каждое изделие тестируется и обязательно проходит заводские испытания!
    
    1. Большой удобный диван трансформер!
    2. Водонепроницаемый, прочный материал, устойчивый к воздействию температур и механическим воздействиям!
    3. Универсальность и мобольность, Вы можете использовать его где угодно, и дома и на природе и даже на воде!
    4. Очень просто и легко надувается, легко сдувается! 
    5. В сложенном виде &ndash; компактен и не занимает место. Очень удобен при перевозке!
    
    
    В комплекте идет:
    Сам многофункциональный надувной диван трансформер.
    Электрический насос, работающий от сети 220В
    Удобная сумка с ремешком для хранения и транспортировки.
    Инструкция на русском языке.
    Ремкомплект.
    
    Варианты использования:
    1) Диван
    2) Кровать с изголовьем
    3) Шезлонг
    4) Низкая кровать
    5) Высокая кровать
    
    
    Image: 
    http://www.softair.su/pictures/bd0012_1.jpg
     
    badhack нравится это.
  4. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    Feed, молодец, не сдался, помог человеку. Он еще в мускул импорт просил :) Мне похожий скрипт стоил 30$ пару месяцев назад на фрилансе, тогда достало что больше трачу время на тз, чем мне пишут скрипт, и начал курить пхп.
     
  5. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    Импорт в мускул дополнительно к вышеописанному скрипту:
    PHP:
    $link mysql_connect('localhost''mysql_user''mysql_password');
    mysql_select_db('mysql_db'$link);
    mysql_query("insert into table (title, section, artno, description) values ('".addslashes(getTitle$file ))."', '".addslashes(getSection$file ))."', '".addslashes(getArtNo$file ))."', '".addslashes(getDescription$file ))."' )");
    Как-то так... но я б лучше закинул всё в класс. Удобнее манипулировать данными.
     
    badhack нравится это.
  6. badhack

    badhack Писатель

    Регистр.:
    14 апр 2007
    Сообщения:
    46
    Симпатии:
    4
    думаю через класс и сделаю.
     
Статус темы:
Закрыта.