За последние 24 часа нас посетили 15565 программистов и 1552 робота. Сейчас ищут 920 программистов ...

Функции парсинга HTML кода.

Тема в разделе "PHP для новичков", создана пользователем novoalex, 3 апр 2008.

  1. novoalex

    novoalex Активный пользователь

    С нами с:
    3 апр 2008
    Сообщения:
    3
    Симпатии:
    0
    Функции парсинга HTML кода.

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

    Допустим есть HTML код:


    Код (Text):
    1. <html>
    2. <head>
    3. <meta http-equiv="content-type" content="text/html;charset=utf-8">
    4. <title>Яндекс: 1</title>
    5. <link rel="SHORTCUT ICON" href="/favicon.ico">
    6. <link rel="Stylesheet" href="http://css.yandex.net/css/optim.css?ctrl">
    7. <script type="text/javascript" src="http://css.yandex.net/css/js/tab.js?new"></script>
    8. <link rel="search" href="opensearch.xml" title="Яндекс" type="application/opensearchdescription+xml">
    9. </head>
    10. <body text="#000000" link="#0000cc" onload="document.forms['web'].text.value = '1'; init();" onpageshow="if (event.persisted) {document.forms['web'].text.value = '1'; init();}" style="background-image:url(http://www.tns-counter.ru/V13a****yandex_ru/ru/CP1251/tmsec=yandex_serp/0)">
    11. <table class="hat">
    12. <tr>
    13. <td width="2%"></td>
    14. <th></th>
    15. <td class="top">
    16. <table>
    17. <tr>
    18. <td width="20%"><h1><br></h1></td>
    19. <td class="mail">
    20. <a href="http://mail.yandex.ru" onclick="w(this,'175.176');">Почта</a>
    21. </td>
    22. <td class="nahodki">
    23. <a href="http://nahodki.yandex.ru">Мои&nbsp;находки</a>
    24. </td>
    25. <td class="cust">
    26. <a href="/cgi-bin/customize.pl?yxqs=text%3D1%26%26rpt%3Drad" onclick="w(this,'175.178');">Настроить&nbsp;поиск</a>
    27. </td>
    28. <td class="logout">
    29. <a href="http://passport.yandex.ru/passport?mode=auth&amp;retpath=http%3A%2F%2Fwww.yandex.ru%2Fyandsearch%3Ftext%3D1%26rpt%3Drad%26login">Войти&hellip;</a>
    30. </td>
    31. </tr>
    32. </table>
    33. </td>
    34. <td width="2%"></td>
    35. </tr>
    36. <tr valign="top">
    37. <td></td>
    38. <th>
    39.  
    40. <[b]table[/b] class=”[b]MyClass[/b]”>
    41. <tr>
    42. <td><b><a href="/" onclick="w(this,'175.179');"><img src="http://img.yandex.net/i/yandex-v9.gif" alt="Яндекс"></a></b></td>
    43. <td><i><i></i></i></td>
    44. </tr>
    45. </table>
    46.  
    47. </body>
    48. </html><!-- 0.494601 -->
    Я передаю в эту функцию следующие: Имя тэга – table, имя класса – MyClass

    А на выходе получал этот самый блок т.е.:

    Function parsHTML($table, $class)

    Код (Text):
    1. <[b]table [/b]class=”[b]MyClass[/b]”>
    2. <tr>
    3. <td><b><a href="/" onclick="w(this,'175.179');"><img src="http://img.yandex.net/i/yandex-v9.gif" alt="Яндекс"></a></b></td>
    4. <td><i><i></i></i></td>
    5. </tr>
    6. </table>
    Вот делал я это функцию да чтото уже запутался, может кто подскажет, или поможет чем, может уже есть такая функция ?

    Заранее всем огромное спасибо !

    PS: Чтото жирным не выделяется ... Там этот блок в HTML коде снизу, я так для понятности... :eek:)
     
  2. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    novoalex
    Покажите наработки
     
  3. novoalex

    novoalex Активный пользователь

    С нами с:
    3 апр 2008
    Сообщения:
    3
    Симпатии:
    0
    Код (Text):
    1.  
    2.   function find_block ($page, $table, $class_name) {
    3.  
    4.     $page = trim($page);
    5.  
    6.     $len_page = strlen($page);
    7.  
    8.     //$page = str_ireplace(' ', '_',$page);
    9.  
    10.     $pos_table = stripos($page, '<'.$table);
    11.  
    12.     $page = substr($page, $pos_table, $len_page);
    13.    
    14.     $pos_class_name = stripos($page, 'class="'.$class_name.'"');
    15.  
    16.     $page = substr($page, $pos_class_name, $len_page);
    17.  
    18.     //$page = substr($page, $pos_class_name, $len_page);
    19.     //while ($pos_tag > 0) {
    20.       //$pos_tag--;
    21.       //if ($pos_tag=0) {
    22.         //$str_tag = substr($page, $pos_tag, 1);
    23.         //if ($str_tag == '<') {
    24.           //$page = substr($page, $pos_tag, $len_page);
    25.           //break;
    26.         //}
    27.       //}
    28.     //}
    29.  
    30.     //$pos = stripos($page, $class_name);
    31.  
    32.     return $page;
    33.   }

    Смешно конечно... :eek:))) Но только полчаса назад функцию писать начал и запутался.... :eek:)

    Дело в точ что мне необходимо вернуть именно БЛОК ! т.е. в данном примере:

    Код (Text):
    1. <[b]table [/b]class=”[b]MyClass[/b]”>
    2. <tr>
    3. <td><b><a href="/" onclick="w(this,'175.179');"><img src="http://img.yandex.net/i/yandex-v9.gif" alt="Яндекс"></a></b></td>
    4. <td><i><i></i></i></td>
    5. </tr>
    6. </table>
    А у меня получается возвращается от имени класса и до len_page....

    Нужно по дереву тегов бегать пока не получается....

    PS Спасибо за быстрый ответ !
     
  4. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
  5. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
  6. novoalex

    novoalex Активный пользователь

    С нами с:
    3 апр 2008
    Сообщения:
    3
    Симпатии:
    0
    Буду разбираться...
    Спасибо огромное ребята !