Как вытащить html код с страницы

Тема в разделе "PHP", создана пользователем xriby, 8 дек 2009.

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

    xriby Создатель

    Регистр.:
    28 сен 2009
    Сообщения:
    23
    Симпатии:
    0
    дана страница:
    HTML:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    <title>Untitled Document</title>
    </head>
    <div class="separator"><i></i>
    </div>
    <div id="sinlgepage">
    <div id="artbody">
    <div class="separator"><i></i></div>
    <div class="simple_body_0pad margin_bottom_20">
    	<table class="main">
    	<tr>
    		<td><a href="1.html">text1</a></td>
    		<td><a href="2.html">text2</a></td>
    	</tr>
    	<tr>
    		<td><a href="3.html">text3</a></td>
    		<td><img src="1.jpg" border="0" alt="1" /></td>
    	</tr>
    	</table>
    	<table class="none">
    	<tr>
    		<td><a href="1.html">text1</a></td>
    		<td><a href="2.html">text2</a></td>
    	</tr>
    	<tr>
    		<td><a href="3.html">text3</a></td>
    		<td><img src="1.jpg" border="0" alt="1" /></td>
    	</tr>
    	</table>
    </div>	 <!-- artbody -->
    <div class="separator"><i></i></div>
    <body>
    </body>
    </html>
    задача:
    - вытащить только таблицу с класcом main
    - удалить все теги <img>
    - удалить все ссылки, но текст оставить

    Т.е. должно остаться:
    HTML:
    <table class="main">
    	<tr>
    		<td>text1</td>
    		<td>text2</td>
    	</tr>
    	<tr>
    		<td>text3</td>
    		<td></td>
    	</tr>
    </table>
     
  2. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    PHP:
    <?php
    preg_match
    ('{<table[^>]+\bclass\s*=\s*[\'"]?main\b["\']?[^>]*>(.*?)</table\s*>}si'$html$m);
    $text $m[1];
    $text preg_replace('{<img[^>]*>}'''$text);
    $text preg_replace('{<a[^>]*>(.*?)</a\s*>}''$1'$text);
    echo 
    $text;
     
    xriby нравится это.
  3. xriby

    xriby Создатель

    Регистр.:
    28 сен 2009
    Сообщения:
    23
    Симпатии:
    0
    Возвращает:
    HTML:
    
    <tr>
    	<td>text1</td>
    	<td>text2</td>
    </tr>
    <tr>
    	<td>text3</td>
    	<td></td>
    </tr>
    
    <table> самому дописывать?
    или исправите выражение?:thenks:
     
  4. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    Если с class="main" устроит, то просто измени
    $text = $m[1];
    на
    $text = $m[0];
     
  5. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    А если c тегами table и без class="main", то указанный код можно подкорректировать так:

    PHP:
    preg_match('{(<table)[^>]+\bclass\s*=\s*[\'"]?main\b["\']?[^>]*(>.*?</table\s*>)}si'$html$m);

    $text $m[1].$m[2];
    $text preg_replace('{<img[^>]*>}'''$text);
    $text preg_replace('{<a[^>]*>(.*?)</a\s*>}''$1'$text);
    echo 
    $text;
     
  6. xriby

    xriby Создатель

    Регистр.:
    28 сен 2009
    Сообщения:
    23
    Симпатии:
    0
    Пытаюсь переписать в функцию:
    PHP:
    <?php
    function get_table_by_class($url$class_name)
    {
        
    $html file_get_contents($url);
        
    preg_match('{<table[^>]+\bclass\s*=\s*[\'"]?$class_name\b["\']?[^>]*>(.*?)</table\s*>}si'$html$m);
        
    $text $m[1];
        
    $text preg_replace('{<img[^>]*>}'''$text);
        
    $text preg_replace('{<a[^>]*>(.*?)</a\s*>}''$1'$text);
        return 
    $text;
    }
    $apl_table get_table_by_class('apl.htm''main');
    echo 
    "<table>" $apl_table "</table>";
    ?> 
    - результат ноль.
    Получается что регулярное выражение не видит переменную.
    Помогите переписать функцию.
     
  7. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    Не видит, потому что кавычки одинарные. Надо:
    PHP:
    <?php
    preg_match
    ('{<table[^>]+\bclass\s*=\s*[\'"]?' $classname '\b["\']?[^>]*>.*?</table\s*>}si'$html$m);
    $text $m[0];
    $text preg_replace('{<img[^>]*>}'''$text);
    $text preg_replace('{<a[^>]*>(.*?)</a\s*>}''$1'$text);
    echo 
    $text
     
    xriby нравится это.
  8. xriby

    xriby Создатель

    Регистр.:
    28 сен 2009
    Сообщения:
    23
    Симпатии:
    0
    .$class_name.
    Спасибо :)
    --------------------------------------
    В случае вложенности таблиц вытаскивает до первого закрывающего тега </table>
    HTML:
    <table class="main" border="0">
    <tr>
    <td>
        <table summary="" border="0">
            <tr>
                <td>
                    <table summary="" border="0">
                        <tr>
                            <td>blabla</td>
                            <td>blabla</td>
                        </tr>
                        <tr>
                            <td>blabla</td>
                            <td>blabla</td>
                        </tr>
                    </table>
                </td>
                <td>blabla</td>
            </tr>
            <tr>
                <td>blabla</td>
                <td>blabla</td>
            </tr>
        </table>
    </td>
    <td>blabla</td>
    </tr>
    <tr>
    <td>blabla</td>
    <td>blabla</td>
    </tr>
    </table>
    Как тут быть?
     
  9. Alix

    Alix

    Регистр.:
    27 янв 2008
    Сообщения:
    234
    Симпатии:
    84
    PHP:
    preg_match('{<table[^>]+\bclass\s*=\s*[\'"]?' $class_name '\b["\']?[^>]*>.*</table\s*>}si'$html$m);
    А так?
     
  10. xriby

    xriby Создатель

    Регистр.:
    28 сен 2009
    Сообщения:
    23
    Симпатии:
    0
    Пустоту возвращает :nezn:
     
Статус темы:
Закрыта.