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

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

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

 

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

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

тема: Граббер новостей
 
 автор: Oligarx   (10.09.2006 в 01:16)   письмо автору
 
 

Здраствуйте.

У меня появилась потребность сделать граббер новостей с сайтов схожей направленности.
Раньше никогда с грабберами не сталкивался, поэтому прошу помощи.
Граббер должен грабить новости прямо со страниц сайтов. (тобеж как я понимаю вырезаться из страницы)

Вот собственно просьба в объяснении алгоритма (и принципов работы).

Если можно то поподробней (и с ссылками) ...


Заранее ОГРОМНОЕ СПАСИБО, за доходчивую информацию.

   
 
 автор: kasmanaft   (10.09.2006 в 01:31)   письмо автору
 
   для: Oligarx   (10.09.2006 в 01:16)
 

Все довольно таки просто (если более менее знать рег. выражения), но для каждого сайта придется писать свое рег. выражение.
Алгоритм:
открываем страницу с новостями (напр. file_get_contents)
пишем регулярное выражение, обрабатываем страницу

давайте ссылку, для примера вырежим что-нить :)

   
 
 автор: Oligarx   (10.09.2006 в 11:47)   письмо автору
 
   для: kasmanaft   (10.09.2006 в 01:31)
 

http://www.championat.ru/ (новости) .... сразу же возникает вопрос, как вырезать например

на странице :
краткая новость (подробней>>>) вот как сделать чтоб всё было так же ... типо вначале сграбили краткие новости а потом и полные ...

и как ваще лучше делать ? грабить когда ктото запрашивает страницу или раз в день например сграбил записал в базу и уже из базы выводишь ?

   
 
 автор: komex   (10.09.2006 в 11:56)   письмо автору
 
   для: Oligarx   (10.09.2006 в 11:47)
 

Может лучше сразу сграбить полные новости, и самому сделать краткие на основе полных?

   
 
 автор: Oligarx   (10.09.2006 в 12:20)   письмо автору
 
   для: komex   (10.09.2006 в 11:56)
 

Может быть ... а не подскажите как пройтись по всем новостям на сайте и все их сграбить ? ....


Я вот посмотрел в коде ...

<a href='/news-23210.html' onfocus='blur()' class=blacklink>Ринкон записал свое имя в историю</a>

так у них выглядят ссылки на страницы с полными новостями ... вот как пробежать по индексной странице и вырезать все эти ссылки по маске news-*.html ... записать их например в файл ... по одной ссылке в строке .... а потом скриптов в цикле по каждой ссывлке пробежать и вырезать полные новости .... правильно мыслю ?

Подскажите ... так или как то по другому лучше ?

   
 
 автор: kasmanaft   (10.09.2006 в 13:15)   письмо автору
 
   для: Oligarx   (10.09.2006 в 12:20)
 

Как обесчал =)


<?
    $text 
file_get_contents ("http://www.championat.ru/");
    if (
preg_match_all ("#<.{1,2} class=h1. style='margin:0px; spacing:0px'><a href='([^']*)' onfocus='blur\(\)' class=blacklink><b>(.*)</b></a>.*<td valign=top class=h1.j style='padding-right:8px;?'>(.*)<a href='/article-[\d]+.html' onfocus='blur\(\)' class=blacklink>#isU"$text$regs))
    {
        for (
$i 0$i count($regs[1])-10$i++)
        {
             
$link trim ($regs[1][$i]);
             
$name trim ($regs[2][$i]);
             
$s_text trim ($regs[3][$i]);
//             echo $link."<br>";
             
echo "<center><b>$name</b></center><br>";
             echo 
"<i>$s_text</i><br><br><br>";

             
$text2 file_get_contents ("http://www.championat.ru$link");
             if (
preg_match ("#</span><br clear=left><br>(.*)</index></td>#isU"$text2$out))
             echo 
"<font size=1>$out[1]</font><br><br><br><br><br><br><br><br><br><br><br><br>";



        }
    }
?>

в цикле count($regs[1])-10; "-10" потом надо убрать (чтоб оценить работу, не выводить сразу все, сделал так)

Конечно лучше сграбить сначала все в свою базу данных, иначе работать будет медленно (и с большой нагрузкой)

   
 
 автор: Oligarx   (10.09.2006 в 14:33)   письмо автору
 
   для: kasmanaft   (10.09.2006 в 13:15)
 

Спасибо огромное. Скипт проверил .... работает так как надо.

Спасибо.

Под свои нужды модернизирую.

   
 
 автор: Oligarx   (30.09.2006 в 16:57)   письмо автору
 
   для: Oligarx   (10.09.2006 в 14:33)
 

Здраствуйте.
Только дошли руки до этого скрипта ... занялся граббером.

И появились вопросы.

Не могли бы вы прокоментировать скрипт ?

вот эту конструкцию ваще не понял
count($regs[1])-10;


и вот это я так понимаю из-за вышесказаной конструкции
            
             $link = trim ($regs[1][$i]); 
             $name = trim ($regs[2][$i]); 
             $s_text = trim ($regs[3][$i]);



толкько как получается такие массивы не пойму ((


заранее спасибо.

   
 
 автор: kasmanaft   (30.09.2006 в 18:27)   письмо автору
 
   для: Oligarx   (30.09.2006 в 16:57)
 

>> вот эту конструкцию ваще не понял
пол месяца прошло ... простительно :)

в цикле count($regs[1])-10; "-10" потом надо убрать (чтоб оценить работу, 
не выводить сразу все, сделал так)

То есть, чтобы не выводить сразу все новости, а сначала поглядеть, правильно скрипт работает или нет.
Трафик жалко :))

В массивы заносится инфа, попавшая в рег. выражение ... (то, что попало в скобки) ... первая скобка - $regs[1], вторая $regs[2] ... а потому как текст большой, новостей на странице много (нужно провести глобальный поиск), нужно использовать ф-ю preg_match_all ... тогда все данные, попавшие в первую скобку, будут заноситься в массив $regs[1] .. двумерный массив получается .. ээмм .. вобщем как-то так =)

   
 
 автор: dima_s_d_s   (22.10.2006 в 19:18)   письмо автору
 
   для: kasmanaft   (10.09.2006 в 13:15)
 

Прикольно!

   
Rambler's Top100
вверх

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