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

Статус
В этой теме нельзя размещать новые ответы.

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>
 
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;
 
Возвращает:
HTML:
<tr>
	<td>text1</td>
	<td>text2</td>
</tr>
<tr>
	<td>text3</td>
	<td></td>
</tr>
<table> самому дописывать?
или исправите выражение?:thenks:
 
Если с class="main" устроит, то просто измени
$text = $m[1];
на
$text = $m[0];
 
А если 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;
 
Пытаюсь переписать в функцию:
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>";
?>
- результат ноль.
Получается что регулярное выражение не видит переменную.
Помогите переписать функцию.
 
Не видит, потому что кавычки одинарные. Надо:
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;
 
.$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>

Как тут быть?
 
PHP:
preg_match('{<table[^>]+\bclass\s*=\s*[\'"]?' . $class_name . '\b["\']?[^>]*>.*</table\s*>}si', $html, $m);
А так?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху