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

Форум Регулярные Выражения

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

 

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

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

тема: Помогите разобраться с граббером
 
 автор: dmitrii_r   (16.01.2007 в 11:29)   письмо автору
 
 

Граблю выдачу с поисковика. Пытаюсь выдрать ссылки и соответствующие снипеты. в переменной $c - кусок выдачи. Вот код с рег. выражением:


<?php
$c 
'<div class=g><h2 class=r><a class=l href="http://www.chrysler.com.au/"><b>Chrysler</b> Australia</a></h2><table border=0 cellpadding=0 cellspacing=0><tr><td class=j><font size=-1><b>CHRYSLER</b> 300C SRT8. Take on the open road today. Learn more. STREET &amp; RACING TECHNOLOGY &middot; <b>CHRYSLER</b> OWNERS &middot; NEWS &amp; EVENTS &middot; FINANCE &amp; INSURANCE <b>...</b><br><span class=a>www.<b>chrysler</b>.com.au/ - 15k - </span><nobr><a class=fl href="http://209.85.165.104/search?q=cache:UZYiHj9h-kAJ:www.chrysler.com.au/+Chrysler&hl=en&ct=clnk&cd=6&lr=lang_en">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&q=related:www.chrysler.com.au/">Similar pages</a></nobr></font></td></tr></table></div> <div class=g><h2 class=r><a class=l href="http://www.daimlerchrysler.ca/">DaimlerChrysler Canada Inc.</a></h2><table border=0 cellpadding=0 cellspacing=0><tr><td class=j><font size=-1><b>Chrysler</b> Canada&#39;s Homepage. Contains pages for all current <b>Chrysler</b> models where you can view images and information.<br><span class=a>www.daimler<b>chrysler</b>.ca/ - 7k - </span><nobr><a class=fl href="http://209.85.165.104/search?q=cache:DQPivr6negcJ:www.daimlerchrysler.ca/+Chrysler&hl=en&ct=clnk&cd=7&lr=lang_en">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&q=related:www.daimlerchrysler.ca/">Similar pages</a></nobr></font></td></tr></table></div>';

$p '|<h2 class=r><a class=l href=(.+)><(.+)<\/a><\/h2><font size=-1>(.+)<tr><td class=j><font size=-1>(.+)<br><span|siU';
preg_match_all($p$c$out);
echo 
$out[1];
 
?>


Выдает почему-то html, что в переменной $c, а далее кусок кода шаблона. Не могу понять в что не правильно. Может быть, в тексте много спецсимволов и их надо экранировать?

   
 
 автор: cheops   (16.01.2007 в 13:26)   письмо автору
 
   для: dmitrii_r   (16.01.2007 в 11:29)
 

У вас после <\/h2> идёт <font size=-1> в то время как в HTML-тексте идёт начало таблицы... кроме того, символ "-" является специальным - его нужно экранировать.

   
 
 автор: dmitrii_r   (16.01.2007 в 13:40)   письмо автору
 
   для: cheops   (16.01.2007 в 13:26)
 

Я уже обнаружил отличие в тексте и шаблоне. Пока упрощаю грабинг. Только ссылка и title, Вот новый шаблон:

$p ='|<div class=g><h2 class=r><a class=l href=\"([^"]+)\">(.+)<\/a><\/h2>|siU';


Но и это не работает 8( Гугл не хочет сдаваться.

   
 
 автор: dmitrii_r   (16.01.2007 в 13:45)   письмо автору
 
   для: dmitrii_r   (16.01.2007 в 11:29)
 

Выдача Гугла разная для разных IP, русская google.ru отличается от того, что выдает google.com. Не только найденным и и html кодом, я взял шаблон для google.ru видимо, поправил на com-ский, но не работает.

   
 
 автор: dmitrii_r   (16.01.2007 в 15:02)   письмо автору
 
   для: dmitrii_r   (16.01.2007 в 11:29)
 

Работает такой код:

<?php
$c 
'<div class=g><h2 class=r><a class=l href="http://www.chrysler.com.au/"><b>Chrysler</b> Australia</a></h2><table border=0 cellpadding=0 cellspacing=0><tr><td class=j><font size=-1><b>CHRYSLER</b> 300C SRT8. Take on the open road today. Learn more. STREET &amp; RACING TECHNOLOGY &middot; <b>CHRYSLER</b> OWNERS &middot; NEWS &amp; EVENTS &middot; FINANCE &amp; INSURANCE <b>...</b><br><span class=a>www.<b>chrysler</b>.com.au/ - 15k - </span><nobr><a class=fl href="http://209.85.165.104/search?q=cache:UZYiHj9h-kAJ:www.chrysler.com.au/+Chrysler&hl=en&ct=clnk&cd=6&lr=lang_en">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&q=related:www.chrysler.com.au/">Similar pages</a></nobr></font></td></tr></table></div> <div class=g><h2 class=r><a class=l href="http://www.daimlerchrysler.ca/">DaimlerChrysler Canada Inc.</a></h2><table border=0 cellpadding=0 cellspacing=0><tr><td class=j><font size=-1><b>Chrysler</b> Canada&#39;s Homepage. Contains pages for all current <b>Chrysler</b> models where you can view images and information.<br><span class=a>www.daimler<b>chrysler</b>.ca/ - 7k - </span><nobr><a class=fl href="http://209.85.165.104/search?q=cache:DQPivr6negcJ:www.daimlerchrysler.ca/+Chrysler&hl=en&ct=clnk&cd=7&lr=lang_en">Cached</a> - <a class=fl href="/search?hl=en&lr=lang_en&q=related:www.daimlerchrysler.ca/">Similar pages</a></nobr></font></td></tr></table></div>'
$p ='|<h2 class=r><a class=l href=(.+)><(.+)<\/a><\/h2><table border=0 cellpadding=0 cellspacing=0><tr><td class=j><font size=\-1>(.+)<br><span|siU';
preg_match_all($p$c$out);
for (
$i 0$i count($out[1]); $i ++)
     {
      echo 
"<a href=".$out[1][$i].">".$out[2][$i]."</a><br>".$out[3][$i]."End of the grabbing";
  
    }
 
?>

Только выдает почему-то лишь первую найденную ссылку с соответствующим снипетом.

   
 
 автор: dmitrii_r   (16.01.2007 в 15:28)   письмо автору
 
   для: dmitrii_r   (16.01.2007 в 15:02)
 

Если убрать модификатор "жадности" U, то выдает все ссылки с соответствующими снипетами, но в первой ссылке вылазит не нужный текст "Cash Similar page" Как сбалансировать "жадность"?

   
 
 автор: dmitrii_r   (16.01.2007 в 15:53)   письмо автору
 
   для: dmitrii_r   (16.01.2007 в 15:02)
 

В зенд студио работает с отмеченным недостатком - либо одна выдача по ссылке с "жадностью", либо без "жадности" все, но и "ненужный" лишний код вылазит.

В Денвере и на сайте у хостера - не работает нифига, выдает куски кода. Возможно из-за уровня ошибок!? Я не очень силен в деталях PHP.

   
 
 автор: dmitrii_r   (16.01.2007 в 16:20)   письмо автору
 
   для: dmitrii_r   (16.01.2007 в 15:53)
 

Уровень ошибок выставил в error_reporting(E_NOTICE); Теперь работает, но "жадность". Кто поможет разобраться? Можно, конечно, еще разик обработать текст и выкинуть ненужное. Но, хочется чтобы было красиво!

   
Rambler's Top100
вверх

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