1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Простенький парсер HTML(сайта). Требуется помощь!

Тема в разделе "Web Coding", создана пользователем KPACHODAP, 25 июн 2007.

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

    KPACHODAP DELETED

    Регистр.:
    21 дек 2009
    Сообщения:
    640
    Симпатии:
    111
    Народ вообщем есть сайт Перейти по ссылке

    Пример:

    Перейти по ссылке

    Нужно написать PHP парсер чтобы выдерал такие вещи как:

    1. Название апарата - Fujifilm FinePix S9100 digital camera specifications
    2. Max resolution - 3488 x 2616
    3. Low resolution - 2592 x 1944, 2048 x 1536, 1600 x 1200, 640 x 480
    4. Aperture range - F2.8 - F4.9
    5. Dimensions - 128 x 93 x 129 mm (5 x 3.7 x 5.1 in)
    и.т.д могу уже аналогично по коду посмотреть и поправить сам!

    Чтобы результат выводило 1-таблица 2-подряд

    Пример "Low resolution - 2592 x 1944, 2048 x 1536, 1600 x 1200, 640 x 480 + Aperture range - F2.8 - F4.9 + и.т.д."


    Как я понял это не сложно написать или хотябы дать идею, просьба давать предложения в готовом коде. За ранее спасибо!
     
  2. fpinger

    fpinger

    Регистр.:
    11 май 2007
    Сообщения:
    253
    Симпатии:
    58
    Это предложение заработать?
     
  3. ArtInt

    ArtInt Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    88
    Симпатии:
    35
    Если нужно инфу с сайта выдрать, то лучше закажи кому нибудь. Если самому не осилить (а судя по посту, я это предпологаю). Просто под каждый сайт нужно обычно индивидуально скрипт писать.
     
  4. KPACHODAP

    KPACHODAP DELETED

    Регистр.:
    21 дек 2009
    Сообщения:
    640
    Симпатии:
    111

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

    Жду предложений - код!!! :tcl:
     
  5. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    PHP:
    function get_content($host$get) {
    $filePointer fsockopen($host80$errorNumber$errorString);
    if (!
    $filePointer)
    {
        exit(
    'Failed opening http socket connection: '.$errorString.' ('.$errorNumber.')<br/>\n');
    }

    $requestHeader "GET " $get "  HTTP/1.1\r\n";
    $requestHeader.= "Host: ".$host."\r\n";
    $requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\r\n";
    $requestHeader.= "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n";
    $requestHeader.= "Accept-Language: ru,en;q=0.5\r\n";
    $requestHeader.= "Accept-Charset: windows-1251;q=0.7,*;q=0.7\r\n";
    $requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $requestHeader.= "Connection: close\r\n";
    //$requestHeader.= "Referer: \r\n\r\n";

    fwrite($filePointer$requestHeader);

    $responseHeader '';
    $responseContent '';

    do {
        
    $responseHeader.= fread($filePointer1);
    }
    while ( !
    preg_match('/\\r\\n\\r\\n$/'$responseHeader) );

    if (!
    strstr($responseHeader"Transfer-Encoding: chunked")) {
        while (!
    feof($filePointer)) {
            
    $responseContent.= fgets($filePointer128);
        }
    }
    else {
        while (
    $chunk_length hexdec(fgets($filePointer))) {
            
    $responseContentChunk '';
                    
    $read_length 0;
                    while (
    $read_length $chunk_length) {
                        
    $responseContentChunk .= fread($filePointer$chunk_length $read_length);
                        
    $read_length strlen($responseContentChunk);
                    }

                    
    $responseContent.= $responseContentChunk;
                    
    fgets($filePointer);
            }

    }
     return 
    $responseContent;
    }
    Вот вам простенькая функция получения содержимого удаленной страницы.
    В функции два аргумента - это хост и гет-запрос.
    Для вот этой страницы Перейти по ссылке а гет-запросом соотв. /reviews/specs/Fujifilm/fuji_finepixs9100.asp
    А полученный контент парсите прег_матчем как вам вздумется :)
     
  6. ArtInt

    ArtInt Постоялец

    Регистр.:
    3 июн 2007
    Сообщения:
    88
    Симпатии:
    35
    Лови кусок кода с регулярками под твой сайт.
    Сначала получи в $data страницу с сайта с помошью функции в посте Nafania.
    Код:
    if (preg_match_all('/<tr>\r\n<td class="tdlabelsimpsm" nowrap>(.*)<\/td>\r\n<td class="tdcontentsm">(.*)<\/td>/', $data, $res_array)) {
            print "<pre>\n";
              var_dump($res_array);
            print "</pre>\n";
    } else {
      echo "no result";
    }
    
    
    Потом с $res_array можешь все что угодно делать.
    Удачи :)
     
  7. KPACHODAP

    KPACHODAP DELETED

    Регистр.:
    21 дек 2009
    Сообщения:
    640
    Симпатии:
    111
    Перейти по ссылке Спасибо Вам, а не могли бы вы в сборе написать полный код и как делать запрос на парсинг. Просто я новичок с кодом, и мне бы Выша помощь в написании полного кода, хотябы 3 характеристики, чтобы уже в коде был завязан массив -
    Пример:
    Also known as: Fujifilmn FinePix S9600
    Aperture range: F2.8 - F4.9
    Compressed format: JPEG (EXIF 2.2)


    А также как метод гет вызвать? За ранее ОГРОМНОЕ СПАСИБО!!!
     
  8. KPACHODAP

    KPACHODAP DELETED

    Регистр.:
    21 дек 2009
    Сообщения:
    640
    Симпатии:
    111
    PHP:
    <?php
    function get_content($host$get) {
    $filePointer fsockopen($host80$errorNumber$errorString);
    if (!
    $filePointer)
    {
        exit(
    'Failed opening http socket connection: '.$errorString.' ('.$errorNumber.')<br/>\n');
    }

    $requestHeader "GET " $get "  HTTP/1.1\r\n";
    $requestHeader.= "Host: ".$host."\r\n";
    $requestHeader.= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3\r\n";
    $requestHeader.= "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2\r\n";
    $requestHeader.= "Accept-Language: ru,en;q=0.5\r\n";
    $requestHeader.= "Accept-Charset: windows-1251;q=0.7,*;q=0.7\r\n";
    $requestHeader.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $requestHeader.= "Connection: close\r\n";
    //$requestHeader.= "Referer: \r\n\r\n";

    fwrite($filePointer$requestHeader);

    $responseHeader '';
    $responseContent '';

    do {
        
    $responseHeader.= fread($filePointer1);
    }
    while ( !
    preg_match('/\\r\\n\\r\\n$/'$responseHeader) );

    if (!
    strstr($responseHeader"Transfer-Encoding: chunked")) {
        while (!
    feof($filePointer)) {
            
    $responseContent.= fgets($filePointer128);
        }
    }
    else {
        while (
    $chunk_length hexdec(fgets($filePointer))) {
            
    $responseContentChunk '';
                    
    $read_length 0;
                    while (
    $read_length $chunk_length) {
                        
    $responseContentChunk .= fread($filePointer$chunk_length $read_length);
                        
    $read_length strlen($responseContentChunk);
                    }
    if (
    preg_match_all('/<tr>\r\n<td class="tdlabelsimpsm" nowrap>(.*)<\/td>\r\n<td class="tdcontentsm">(.*)<\/td>/'$data$res_array)) {
            print 
    "<pre>\n";
              
    var_dump($res_array);
            print 
    "</pre>\n";
    } else {
      echo 
    "no result";
    }
                    
    $responseContent.= $responseContentChunk;
                    
    fgets($filePointer);
            }

    }
    return 
    $responseContent;


    $host "dpreview.com";
    $get "/reviews/specs/Fujifilm/fuji_finepixs9100.asp";
    $data get_content($host$get);
    if (
    preg_match_all('/&nbsp;(.*)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/i'$data$res_array)) {
            print 
    "<pre>\n";
              
    var_dump($res_array);
            print 
    "</pre>\n";
    } else {
      echo 
    "no result";
    }
    ?>
    Выдает ошибку: Fatal error: Maximum execution time of 30 seconds exceeded in P:\home\test1.ru\www\newsimport\kk.php on line 25


    пробывал выставлять в пхп.ини
    max_execution_time = 300 ; Maximum execution time of each script, in seconds

    не помогло, жду предложений!
     
  9. Nafania

    Nafania

    Регистр.:
    24 мар 2007
    Сообщения:
    167
    Симпатии:
    46
    Какую-то чушь наваяли. Я вам советую скачать несколько учебников по PHP и подучиться, а потом просить совета, ибо за вас никто ничего писать не будет (точней будут, но только в случае оплаты труда).
    ЗЫ после ковыряния php.ini надо рестартить апач. Используйте set_time_limit();
     
  10. KPACHODAP

    KPACHODAP DELETED

    Регистр.:
    21 дек 2009
    Сообщения:
    640
    Симпатии:
    111
    Перейти по ссылке, я не полный нуб. И немного соображаю и рестарт делал. Также я прошу тех людей которые готовы помочь с ерундой. Если нет желания можешь вообще не писать!

    Добавлено через 11 минут
    PHP:
    <pre>
    <?php
        set_time_limit
    (0);
        
    $_file_for_parsing "http://www.dpreview.com/reviews/specs/Fujifilm/fuji_finepixs9100.asp";
        
    $_save_urls_to "urls.txt";
        
        
    $fp fopen($_save_urls_to"w+");
        
    $_anchors_pattern "/&nbsp;(.*)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/i";
        
    $_doc strip_tags(file_get_contents($_file_for_parsing), "<a>");
            
        if (
    preg_match_all($_anchors_pattern$_doc$res_array)) {
            
    $n count($res_array[1]);
            for (
    $i=0;$i<$n;$i++) {
                
    $link $res_array[1][$i];
                
    fwrite($fp$link "\n"4096);
                
    //print $link . "\n";
                
    echo $res_array[1][$i];
            }
        }

        
    fclose($fp);
        
    ?>
    </pre>

    вот есть код он все вытягивает. Но как забить это все в таблицу чтобы характеристика соответствовала значению. За ранее спасибо! :ah:
     
Статус темы:
Закрыта.