|
|
|
| в очередной раз я не смог справиться с рег.выражениями и прошу вашей помощи
есть табличка:
<tr style='height: 20px;'>
<td class=row2r><b>1.
<td class=row2l style='padding-left: 2px;'><a class=mnu href='player.php?num=279480'>Егор Сабитов</a> <span><a href='nation.php?num=23911'><img border=0 src='pics/pl.gif' title='Игрок' width=14 height=14 style='position: relative; top: 2px;'></a></span>
<td class=row><img src="cntr/sb.gif" title="Сборная" width=20 height=14>
<td class=row2>AM
<td class=row2>18
<td class=row2>59
<td class=row2>3
<td class=row2>
<td class=row2l><a target=_blank href='team.php?num=8276' class=mnu>"Динамо" Сакапа</a>
<td class=row2r nowrap style='padding-right: 1px;'><b>13 941</b>K
<tr bgcolor='#e0e0e0' style='height: 20px;'>
<td class=row2r><b>2.
<td class=row2l style='padding-left: 2px;'><a class=mnu href='player.php?num=279401'>Андрей Подольски</a> <span><a href='nation.php?num=23911'><img border=0 src='pics/pl.gif' title='Игрок' width=14 height=14 style='position: relative; top: 2px;'></a></span>
<td class=row><img src="cntr/sb.gif" title="Сборная" width=20 height=14>
<td class=row2>DM
<td class=row2>18
<td class=row2>55
<td class=row2>2
<td class=row2> Л2
<td class=row2l><a target=_blank href='team.php?num=4703' class=mnu>"Подбешкиджи" Белград</a>
<td class=row2r nowrap style='padding-right: 1px;'><b>12 733</b>K
и т.д.
|
из нее надо достать
Егор Сабитов AM 18 59 3 "Динамо" Сакапа
Андрей Подольски DM18 55 2 Л2 "Подбешкиджи" Белград
и т.д.
для передачи данных в бд | |
|
|
|
|
|
|
|
для: P@Sol
(04.08.2008 в 13:25)
| | Попробуй сначала просто strip_tags(), а если что останется, тогда думай. | |
|
|
|
|
|
|
|
для: Николай2357
(04.08.2008 в 18:30)
| | кроме этой таблице на странице есть еще меню всякие...это конечно вариант...но все же | |
|
|
|
|
|
|
|
для: P@Sol
(04.08.2008 в 21:01)
| | Чтобы составить паттерн, нужно знать, что убирать, что оставлять. А так получается - пойди туда не знаю куда. Если нужно выдернуть контент из HTML, то это то, что нужно. Только сначала нужно вырезать скрипты:
$cont=preg_replace("#<script[^>]*?>.*?</script>#si", "", $cont);
|
и стили:
$cont=preg_replace("#<style[^>]*?>.*?</style>#si", "", $cont);
|
Потом очистить от тегов:
и привести в удобоваримую форму:
$cont=preg_replace("#[\r\n]+#", " ", $cont);
$cont=preg_replace("#[\s]+#", " ", $cont);
|
(получится все в строчку).
Немножко корявенько, но у меня пока работает.
Ну а с меню и прочем, нужно тогда структуру страницы знать, что бы что-то делать. | |
|
|
|
|
66.7 Кб |
|
|
для: Николай2357
(05.08.2008 в 04:53)
| | прикрепил эту страницу | |
|
|
|
|
|
|
|
для: P@Sol
(05.08.2008 в 09:26)
| | А нужно конкретно ее распарсить или похожие другие есть? И в каком виде данные нужны, отдельно или в строчку? | |
|
|
|
|
|
|
|
для: Николай2357
(05.08.2008 в 12:26)
| | 1. ее и похожие (меняется национальность) - в принцепе если распарсить ее, то с национальностями не должно быть проблем - вот эта строка меняется
<img src="plrz_show.php_files/id страны.gif" title="Название страны" height="14" width="20">
|
2. а в чем разница? как проще? данные всегда же можно из строки преобразовать в отдельные а из отдельных стелать строку.... мне в принцепе все равно
мне эти данные нужна по отдельности положить в бд...возраст в столбец возроста, имя в столбец имя и т.д. | |
|
|
|
|
|
|
|
для: P@Sol
(05.08.2008 в 12:53)
| | Проблемы с интернетом, заставил долго ждать. Если конкретно эту страницу, то просто от тегов ее не очистишь, она JS скриптом формируется. Можно вот так снаглеть:
<?
$cont=$_POST['text'];
$cont=stripslashes($cont);
$mass=explode("<b>1.</b>",$cont);
$cont=$mass[1];
$mass=explode("<b>No.</b>",$cont);
$cont=$mass[0];
$cont=str_replace(">","> ",$cont);
$cont=strip_tags($cont);
$cont=preg_replace("#[\r\n]+#", "", $cont);
$cont=preg_replace("#[\s]+#", " ", $cont);
?>
<form action="test.php" method="post"><textarea name='text' cols="100" rows="30">
<?
echo $cont;
?>
</textarea><input type="submit"></form>
?>
|
а дальше дели по пробелам, считай и складывай в таблицу. Это случаем не тотализатор? | |
|
|
|
|
|
|
|
для: Николай2357
(05.08.2008 в 16:34)
| | >Проблемы с интернетом, заставил долго ждать. Если конкретно эту страницу, то просто от >тегов ее не очистишь, она JS скриптом формируется. Можно вот так снаглеть:
разве js формирует??? по-моему phpюююно ваш вариант красивый, забрал)) спасибо
>а дальше дели по пробелам, считай и складывай в таблицу. Это случаем не тотализатор?
по пробелам нельзя)) Там есть города из двух слов и т.п., но выход нашел)) поставил *, там где буду делить)))
не тотализатор, просто игра на тему футбола...а так я буду отслеживать рост игроков конкурентов | |
|
|
|
|
|
|
|
для: Николай2357
(05.08.2008 в 16:34)
| | >Проблемы с интернетом, заставил долго ждать. Если конкретно эту страницу, то просто от >тегов ее не очистишь, она JS скриптом формируется. Можно вот так снаглеть:
разве js формирует??? по-моему phpюююно ваш вариант красивый, забрал))
>а дальше дели по пробелам, считай и складывай в таблицу. Это случаем не тотализатор?
по пробелам нельзя)) Там есть города из двух слов и т.п., но выход нашел)) поставил *, там где буду делить)))
не тотализатор, просто игра на тему футбола...а так я буду отслеживать рост игроков конкурентов | |
|
|
|
|
|
|
|
для: P@Sol
(05.08.2008 в 17:47)
| | Вот это вот: document.write('........ означает, что страница "выплевывается" скриптом.
Желаю удачи в игре. | |
|
|
|
|
|
|
|
для: Николай2357
(05.08.2008 в 17:54)
| | >Вот это вот: document.write('........ означает, что страница "выплевывается" скриптом.
хм...не вижу такой строки:( номер не подскажешь?
>Желаю удачи в игре.
большое спасибо, теперь буду бороться за медали))) | |
|
|
|
|
|
|
|
для: P@Sol
(05.08.2008 в 17:58)
| | Ищущий, да обрящет...
Вот этот комментарий, и следующий скрипт.
<!--/COUNTER--><!--LiveInternet counter--> | |
|
|
|
|
|
|
|
для: Николай2357
(05.08.2008 в 18:04)
| | так это счетчики....))) | |
|
|
|
|
|
|
|
для: Николай2357
(05.08.2008 в 17:54)
| | удалил все строки <script>...</script> - страница отображается полностью | |
|
|
|
|
|
|
|
для: P@Sol
(05.08.2008 в 18:03)
| | Она не вся скриптом, только меню помоему, сильно не вникал. Но это мешает от тегов чистить. | |
|
|
|
|
|
|
|
для: Николай2357
(05.08.2008 в 18:06)
| | ну, вообщем заюзал я ваш скрипт, оч полезно и красиво, очень рад, спасибо | |
|
|
|
|
|
|
|
для: Николай2357
(05.08.2008 в 18:06)
| | Помоему от тегов чистить не обязательно - так будет куда проще! Вот мой вариант решения :
(может вариант и корявый, но у меня сработало на ура =)
<pre>
<?
$content=file_get_contents("a.htm"); // Страничка
$content=content_norm($content);
//$content = iconv("utf-8","cpwin-1251",$content);
$content=utf8_win($content);
// Регулярка
preg_match_all("|player.php.*>.*([А-Яа-я][А-Яа-я\s]+)</a>.*>([0-9]+)</td><td.*>([0-9]+)</td><td.*>([0-9]+)</td><td.*> (.*)</td><td.*<a .*>([А-Яа-я\"\'][А-Яа-я\s\"\'\_\-]+)</a></td>.*</tr>|iSU",$content,$out);
unset($out[0]);
// Выводим
foreach($out[1] as $i=>$v) echo "$v ".$out[2][$i]." ".$out[3][$i]." ".$out[4][$i]." -> ".$out[5][$i]." <- ".$out[6][$i]." \n";
// В 1 строку
function content_norm($x)
{
$x=preg_replace("#[\r\n]+#", " ", $x);
return preg_replace("#[\s]+#", " ", $x);
}
// Из УТФ перегоняем в вин
function utf8_win ($s){
$out=""; $c1="";
$byte2=false;
for ($c=0;$c<strlen($s);$c++){
$i=ord($s[$c]);
if ($i<=127) $out.=$s[$c];
if ($byte2){
$new_c2=($c1&3)*64+($i&63); $new_c1=($c1>>2)&5;
$new_i=$new_c1*256+$new_c2;
if ($new_i==1025){
$out_i=168;
}else{
if ($new_i==1105){
$out_i=184;
}else {
$out_i=$new_i-848;
}}
$out.=chr($out_i);
$byte2=false;
}
if (($i>>5)==6) {
$c1=$i;
$byte2=true;
}}
return $out;
}
?>
|
| |
|
|
|
|
|
|
|
для: fivemusic
(05.08.2008 в 23:26)
| | А чем проще? Если теги мешают спокойно жить, люди не зря ночей не спали, придумывая функцию strip_tags К томуже Ваш вариант не сработает, если фамилия будет Ёжиков. Или Renaldo. | |
|
|
|
|
|
|
|
для: Николай2357
(06.08.2008 в 00:41)
| |
<pre><?
$time = microtime();
###########################################
$text = file_get_contents('a.htm');
preg_match('|<tr bgcolor="#006600">(?:(?!<tr bgcolor="#006600">).[^<]*)+|s', $text, $text);
// echo htmlspecialchars($text[0]);
$text = preg_split('#(?:<[^>]+>\s*)+#', $text[0], -1, 1);
#print_r($text);
$text = array_chunk($text, 10);
print_r($text);
###########################################
echo '<hr>' . (microtime() - $time) .'<hr>';
?></pre>
|
<pre><?
$time = microtime();
###########################################
$text = file_get_contents('a.htm');
preg_match('|<tr bgcolor="#006600">(?:(?!<tr bgcolor="#006600">).[^<]*)+|s', $text, $text);
//
$text = preg_split('#(?=<tr)#', $text[0], -1, 1);
#print_r($text);
function s_t (&$val) {
$val = strip_tags($val);
}
array_walk($text, 's_t');
print_r($text);
###########################################
echo '<hr>' . (microtime() - $time) .'<hr>';
?></pre>
|
<pre><?
$time = microtime();
###########################################
$text = file_get_contents('a.htm');
preg_match('|<tr bgcolor="#006600">(?:(?!<tr bgcolor="#006600">).[^<]*)+|s', $text, $text);
//
$text = preg_split('#(?=<tr)#', $text[0], -1, 1);
$text = preg_replace('#(?:<[^>]+>)+#', ' ', $text);
print_r($text);
###########################################
echo '<hr>' . (microtime() - $time) .'<hr>';
?></pre>
|
| |
|
|
|
|
|
|
|
для: xx77
(06.08.2008 в 03:00)
| | .) только время иногла с минусом показывает
переделывать нет времени
-0.986602 | |
|
|
|
|
|
|
|
для: xx77
(06.08.2008 в 03:00)
| | почему-то во всех случаях $text = file_get_contents('a.htm'); пусто вместо a.htm ставлю свой путь | |
|
|
|
|
|
|
|
для: P@Sol
(06.08.2008 в 09:59)
| |
<?
$text = file_get_contents('a.htm');
echo htmlspecialchars($text) . '<hr>
<hr>';
preg_match('|<tr bgcolor="#006600">(?:(?!<tr bgcolor="#006600">).[^<]*)+|s', $text, $text);
echo htmlspecialchars($text[0]);
?>
|
Если точно после file_get_contents()
а не после preg_match(),
то если файл находится на вашей машине , скорее всего он пуст ,) или неверно указан путь.
(во втором случае должно выводиться Warning)
или если файл получается по http-адресу {
попробуйте скачиваются-ли с других адресов функцией file_get_contents()
если да , то возможно вам вместо файла отдаётся какой-нибудь заголовок (типа переадресации например)
если нет , возможно что-то с диррективой allow_url_fopen , но тоже должно быть Warning
(если не выключен вывод ошибок)
}
вобщем трудно сказать что-то определённое .) | |
|
|
|
|
|
|
|
для: xx77
(06.08.2008 в 10:47)
| |
<?
$text = file_get_contents('http://virtualsoccer.ru/plrz_show.php?nat_id=124&sort=4');
|
Все отлично видно, только кодировку смени, а то бракозябры. | |
|
|
|
|
|
|
|
для: xx77
(06.08.2008 в 10:47)
| | точно))
1. на хостинге нас заставили отключить allow_url_fopen
2. а на локальной машине доступ в интернет через прокси
вот поэтому нигде я и не вижу страницу
счас пробую через fsockopen, но пока, что то не получается | |
|
|
|