Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Парсер
 
 автор: Crayzers   (26.09.2008 в 03:00)   письмо автору
 
 

Помогите с парсером….
Есть страница www.имя_сайта.ru
На этой странице хранятся видеоролики….
На каждой странице по 10-15 шт
Кусок html постоянно повторяется только значения меняются
Нужно выдернуть те элементы которые отмечены жирным шрифтом….
2 суток уже мучаюсь толком ничего не получается….
Выдергиваются только отдельно элементы а со всем куском не могу сработаться : (
<div class="audioRow" id="audio38857975" style='margin:0px auto;'>
 <table style="width:575px" style='margin-left:10px;'><tbody>
 <tr><td style="width: 18px; vertical-align:top">
 <img class="playimg" onclick="return operate(38857975,1441,4137954,'55c3f47893',228);" id="imgbutton38857975" nosorthandle="true" src="images/play.gif"/>
 </td>                                                                                                                                          
 <td style="width: 515px;"><div style='float:left'>
  <b id="performer38857975">Dimas</b> - <span id="title38857975">Выстрел в цель!!!</span> <small>(<a href='id4137954'>Лена</a>)</small></div>
  <div class="duration">3:48</div>
 </td>
 <td style="width: 40px;"><a class='addAudioLink' href='video.php?act=add&add=0&gid=0&aid=38857975&oid=4137954&hash=f483045f7b48110b720c190e6ef4e1ce'>Добавить</a>
 </td>
 </tr>
 <tr><td></td>
 <td>
<div style="height:14px;">
<div id="line38857975" class="playline"></div>
<div id="toddler38857975" class="toddler"></div>
<div id="player38857975" style="display: none;" class="playerClass"></div>
</div>
 </td>
 <td></td>
 </tr>
 </tbody>
</table>
<div id="lyrics38857975"></div>
</div>


Или можно нормальную ссылку по созданию грабера страниц то ничего путного не нашел….: (

  Ответить  
 
 автор: AlexDIXI   (26.09.2008 в 09:47)   письмо автору
 
   для: Crayzers   (26.09.2008 в 03:00)
 

Здравствуйте Crayzers. Я очень много раз сталкивался с этим.. есть пару идей, но к сожалению, код будет грамостким. Вообще лучше тут использвоать регулярные выражения, но я с мини только начал работаь, опыта мало что б вот так прямо сейчас написать вам код.

Вот смысл моей идеи. Парсим сраницу я так понимаю с следующим кодом котоый вы указали. И с помощью strpos и substr вырезаем те элементы которые нам не обходимы. И заносим их в нужные нам переменные.

Снача нужно посмотреть внимательно код страницы. Вот что я придумал:


<?php
$contents 
=  "<div class=\"audioRow\" id=\"audio38857975\" style='margin:0px auto;'> 
 <table style=\"width:575px\" style='margin-left:10px;'><tbody> 
 <tr><td style=\"width: 18px; vertical-align:top\"> 
 <img class=\"playimg\" onclick=\"return operate(38857975,1441,4137954,'55c3f47893',228);\" id=\"imgbutton38857975\" nosorthandle=\"true\" src=\"images/play.gif\"/> 
 </td>                                                                                                                                           
 <td style=\"width: 515px;\"><div style='float:left'> 
  <b id=\"performer38857975\">Dimas</b> - <span id=\"title38857975\">Выстрел в цель!!!</span> <small>(<a href='id4137954'>Лена</a>)</small></div> 
  <div class=\"duration\">3:48</div> 
 </td> 
 <td style=\"width: 40px;\"><a class='addAudioLink' href='video.php?act=add&add=0&gid=0&aid=38857975&oid=4137954&hash=f483045f7b48110b720c190e6ef4e1ce'>Добавить</a> 
 </td> 
 </tr> 
 <tr><td></td> 
 <td> 
<div style=\"height:14px;\"> 
<div id=\"line38857975\" class=\"playline\"></div> 
<div id=\"toddler38857975\" class=\"toddler\"></div> 
<div id=\"player38857975\" style=\"display: none;\" class=\"playerClass\"></div> 
</div> 
 </td> 
 <td></td> 
 </tr> 
 </tbody> 
</table> 
<div id=\"lyrics38857975\"></div> 
</div>
"
;

// создаем копии старницы, что б потом вырезать с каждой по эллементу. 

$operate $contents// Копия для "38857975,1441,4137954,'55c3f47893',228"
$bid $contents// Копия для "Dimas"
$spanid $contents// Копия для "Выстрел в цель!!!"
$small $contents// Копия для "Лена"
$duration $contents// Копия для "3:48"

// Вырезаем "38857975,1441,4137954,'55c3f47893',228"

$pos strpos($operate"operate("); 
$operate substr($operate$pos);
$pos strpos($operate");");
$operate substr($operate8,  $pos -8);

$operate trim($operate);


// Вырезаем "Dimas"

$pos strpos($bid"<div style='float:left'>"); 
$bid substr($bid$pos);
$pos strpos($bid"</b>");
$bid substr($bid0,  $pos );

$bid strip_tags($bid);
$bid trim($bid);


// Вырезаем "Выстрел в цель!!!"

$pos strpos($spanid"<span id="); 
$spanid substr($spanid$pos);
$pos strpos($spanid"</span>");
$spanid substr($spanid0,  $pos );

$spanid strip_tags($spanid);
$spanid trim($spanid);


// Вырезаем "Лена"

$pos strpos($small"<a href='id"); 
$small substr($small$pos);
$pos strpos($small"</a>");
$small substr($small0,  $pos );

$small strip_tags($small);
$small trim($small);


// Вырезаем "3:48"

$pos strpos($duration"<div class=\"duration\">"); 
$duration substr($duration$pos);
$pos strpos($duration"</div>");
$duration substr($duration0,  $pos );

$duration strip_tags($duration);
$duration trim($duration);


// Вывод

echo $operate." | ".$bid." | ".$spanid." | ".$small." | ".$duration ;

?>



и вот что у меня получилось :)


38857975,1441,4137954,'55c3f47893',228 | Dimas | Выстрел в цель!!! | Лена | 3:48


Спасибо за внимание. Обращайтесь еще..

  Ответить  
 
 автор: sim5   (26.09.2008 в 10:16)   письмо автору
 
   для: AlexDIXI   (26.09.2008 в 09:47)
 

Ну если ориентироваться на постоянство атрибутов тегов, то можно и проще:
<?
$contents 
substr($contents,strpos($contents,"(")+1,strpos($contents,"addAudioLink"));
$s1 substr($contents,0,strpos($contents,")"));
$contents substr($contents,strpos($contents,"performer38857975")+19);
$s2 substr($contents,0,strpos($contents,"</b>"));
$contents substr($contents,strpos($contents,"title38857975")+15);
$s3 substr($contents,0,strpos($contents,"</span>"));
$contents substr($contents,strpos($contents,"id4137954")+11);
$s4 substr($contents,0,strpos($contents,"</a>"));
$contents substr($contents,strpos($contents,"duration")+10);
$s5 substr($contents,0,strpos($contents,"</div>"));
echo 
$s1." - ".$s2." - ".$s3." - ".$s4." - ".$s5;

  Ответить  
 
 автор: AlexDIXI   (27.09.2008 в 12:28)   письмо автору
 
   для: sim5   (26.09.2008 в 10:16)
 

id наверника меняются рэндомно. И тогда этот скрипт не сработает, а мой скрипт работаеть будет даже если ID меняете..

  Ответить  
 
 автор: sim5   (27.09.2008 в 12:50)   письмо автору
 
   для: AlexDIXI   (27.09.2008 в 12:28)
 

Разумно, но ничего не стоит удалить переводы строк и табуляцию, вытянув текст в строку, и взять за основу поиска не номера id, и тогда... Короче, это я к тому, что ваш код может быть намного короче.

  Ответить  
 
 автор: AlexDIXI   (27.09.2008 в 12:54)   письмо автору
 
   для: sim5   (27.09.2008 в 12:50)
 

Угу согласен. Я сделал так что б работало, если постаратся то получится нечто короче..

  Ответить  
 
 автор: mihdan   (26.09.2008 в 17:32)   письмо автору
 
   для: Crayzers   (26.09.2008 в 03:00)
 

Возможно вас заинтересует http://php.net/manual/en/ref.domxml.php

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования