|
|
|
| Здраствуйте.
У меня появилась потребность сделать граббер новостей с сайтов схожей направленности.
Раньше никогда с грабберами не сталкивался, поэтому прошу помощи.
Граббер должен грабить новости прямо со страниц сайтов. (тобеж как я понимаю вырезаться из страницы)
Вот собственно просьба в объяснении алгоритма (и принципов работы).
Если можно то поподробней (и с ссылками) ...
Заранее ОГРОМНОЕ СПАСИБО, за доходчивую информацию. | |
|
|
|
|
|
|
|
для: Oligarx
(10.09.2006 в 01:16)
| | Все довольно таки просто (если более менее знать рег. выражения), но для каждого сайта придется писать свое рег. выражение.
Алгоритм:
открываем страницу с новостями (напр. file_get_contents)
пишем регулярное выражение, обрабатываем страницу
давайте ссылку, для примера вырежим что-нить :) | |
|
|
|
|
|
|
|
для: kasmanaft
(10.09.2006 в 01:31)
| | http://www.championat.ru/ (новости) .... сразу же возникает вопрос, как вырезать например
на странице :
краткая новость (подробней>>>) вот как сделать чтоб всё было так же ... типо вначале сграбили краткие новости а потом и полные ...
и как ваще лучше делать ? грабить когда ктото запрашивает страницу или раз в день например сграбил записал в базу и уже из базы выводишь ? | |
|
|
|
|
|
|
|
для: Oligarx
(10.09.2006 в 11:47)
| | Может лучше сразу сграбить полные новости, и самому сделать краткие на основе полных? | |
|
|
|
|
|
|
|
для: komex
(10.09.2006 в 11:56)
| | Может быть ... а не подскажите как пройтись по всем новостям на сайте и все их сграбить ? ....
Я вот посмотрел в коде ...
<a href='/news-23210.html' onfocus='blur()' class=blacklink>Ринкон записал свое имя в историю</a>
|
так у них выглядят ссылки на страницы с полными новостями ... вот как пробежать по индексной странице и вырезать все эти ссылки по маске news-*.html ... записать их например в файл ... по одной ссылке в строке .... а потом скриптов в цикле по каждой ссывлке пробежать и вырезать полные новости .... правильно мыслю ?
Подскажите ... так или как то по другому лучше ? | |
|
|
|
|
|
|
|
для: 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" потом надо убрать (чтоб оценить работу, не выводить сразу все, сделал так)
Конечно лучше сграбить сначала все в свою базу данных, иначе работать будет медленно (и с большой нагрузкой) | |
|
|
|
|
|
|
|
для: kasmanaft
(10.09.2006 в 13:15)
| | Спасибо огромное. Скипт проверил .... работает так как надо.
Спасибо.
Под свои нужды модернизирую. | |
|
|
|
|
|
|
|
для: Oligarx
(10.09.2006 в 14:33)
| | Здраствуйте.
Только дошли руки до этого скрипта ... занялся граббером.
И появились вопросы.
Не могли бы вы прокоментировать скрипт ?
вот эту конструкцию ваще не понял
и вот это я так понимаю из-за вышесказаной конструкции
$link = trim ($regs[1][$i]);
$name = trim ($regs[2][$i]);
$s_text = trim ($regs[3][$i]);
|
толкько как получается такие массивы не пойму ((
заранее спасибо. | |
|
|
|
|
|
|
|
для: Oligarx
(30.09.2006 в 16:57)
| | >> вот эту конструкцию ваще не понял
пол месяца прошло ... простительно :)
в цикле count($regs[1])-10; "-10" потом надо убрать (чтоб оценить работу,
не выводить сразу все, сделал так)
|
То есть, чтобы не выводить сразу все новости, а сначала поглядеть, правильно скрипт работает или нет.
Трафик жалко :))
В массивы заносится инфа, попавшая в рег. выражение ... (то, что попало в скобки) ... первая скобка - $regs[1], вторая $regs[2] ... а потому как текст большой, новостей на странице много (нужно провести глобальный поиск), нужно использовать ф-ю preg_match_all ... тогда все данные, попавшие в первую скобку, будут заноситься в массив $regs[1] .. двумерный массив получается .. ээмм .. вобщем как-то так =) | |
|
|
|
|
|
|
|
для: kasmanaft
(10.09.2006 в 13:15)
| | Прикольно! | |
|
|
|