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

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

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

 

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

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

тема: Грабер названий с сайта
 
 автор: 27   (29.11.2007 в 02:14)   письмо автору
 
 

Ребят помогите с кодом для грабера, очень нужно:
пройтись по сайту, узнать название (оно выделено на сайте жирным) узнать есть ли такой у меня в базе, если нет = брать инфу, если есть идти по линкам дальше.

в частности не могу придумать рег. выражения для того, чтоб забрать, например, отсюда
www.tophotels.ru/main/hotel/al17221/ название и описание.

надеюсь на вашу помощь

   
 
 автор: Faraon   (29.11.2007 в 09:34)   письмо автору
 
   для: 27   (29.11.2007 в 02:14)
 

как то так

<?php
$t
=file_get_contents("http://www.tophotels.ru/main/hotel/al17221/");
preg_match("#<h1[^>]+>(.+?)</h1>#is",$t,$out);
print 
$out[1]."<br><br>";
preg_match("#<td class=c2.+?<p><strong>(.+?)</td>#is",$t,$out1);
print 
$out1[1];
?>

   
 
 автор: 27   (29.11.2007 в 11:05)   письмо автору
 
   для: Faraon   (29.11.2007 в 09:34)
 

спасибо, за помощь!

   
 
 автор: 27   (29.11.2007 в 13:35)   письмо автору
 
   для: 27   (29.11.2007 в 02:14)
 

Тепер я захожу на главную и получаю список страниц - стран, по которым нужно пройтись:
<?php 
 $t 
file_get_contents("http://www.tophotels.ru/"); 
 
preg_match("#<td class=f11.+?(.+?)</td>#is"$t$out);  
 print 
str_replace("style=\"border:1px solid #f0f0f0\">"""$out[1]);
?>


а как по ним пройтись и как забрать контент с них если нужно только название отеля и курорт?

   
 
 автор: Faraon   (29.11.2007 в 15:28)   письмо автору
 
   для: 27   (29.11.2007 в 13:35)
 

Такой подойдет?

<?php
set_time_limit
(0); 
$t file_get_contents("http://www.tophotels.ru/");
preg_match_all("#<option value=(.+?)>(.+?)</option>#is"$t$out);
 for(
$i=1;$i<count($out[1]);$i++){
 print 
"<b>".$out[2][$i]."</b><br>";
$tt=file_get_contents("http://www.tophotels.ru/main/hotels/".str_replace('"',"",$out[1][$i]));
 
preg_match_all("#<tr class.+?<a[^>]+>(.+?)</a>.+?<td.+?>(.+?)</td>#is"$tt$out1);
for(
$j=1;$j<count($out1[1]);$j++){
print 
"Отель - ".$out1[1][$i]." | Курорт - ".$out1[2][$i]."<br>";
}
}
?>

   
 
 автор: 27   (29.11.2007 в 16:10)   письмо автору
 
   для: Faraon   (29.11.2007 в 15:28)
 

почти, скрипт читает повторно одну и туже запись, + мне нужен будет линк на описание, чтоб следующий кусок зашел и забрал его.

   
 
 автор: Faraon   (29.11.2007 в 16:25)   письмо автору
 
   для: 27   (29.11.2007 в 16:10)
 

Здесь я опечатался

print "Отель - ".$out1[1][$i]." | Курорт - ".$out1[2][$i]."<br>"; 

не $i a $j

   
 
 автор: 27   (29.11.2007 в 16:43)   письмо автору
 
   для: Faraon   (29.11.2007 в 16:25)
 

гуд, пасиб

   
 
 автор: Faraon   (29.11.2007 в 16:48)   письмо автору
 
   для: 27   (29.11.2007 в 16:43)
 

С ссылками

<?php
 set_time_limit
(0);
 
$t file_get_contents("http://www.tophotels.ru/");
preg_match_all("#<option value=(.+?)>(.+?)</option>#is"$t$out);
 for(
$i=1;$i<count($out[1]);$i++){
 print 
"<b>".$out[2][$i]."</b><br>";
$tt=file_get_contents("http://www.tophotels.ru/main/hotels/".str_replace('"',"",$out[1][$i]));
 
preg_match_all("#<tr class.+?<a href=\"(.+?)\" title=\"[^>]+\">(.+?)</a>.+?<td.+?>(.+?)</td>#is"$tt$out1);
for(
$j=1;$j<count($out1[2]);$j++){
print 
"<a href=http://www.tophotels.ru".$out1[1][$j].">Отель - ".$out1[2][$j]."</a> | Курорт - ".$out1[3][$j]."<br>";
}
}
?>

   
 
 автор: 27   (29.11.2007 в 18:40)   письмо автору
 
   для: 27   (29.11.2007 в 02:14)
 

С этим разобрался, теперь не хочу, чтоб ip моего сервера поместили в бан лист, как этого избежать, помимо того, что инфу буду грабить не одним махом....?
тут можно применить proxy, да? а как? =)

   
 
 автор: Faraon   (29.11.2007 в 20:44)   письмо автору
 
   для: 27   (29.11.2007 в 18:40)
 

А там что бан-лист есть?

   
 
 автор: 27   (30.11.2007 в 19:56)   письмо автору
 
   для: Faraon   (29.11.2007 в 20:44)
 

да

   
 
 автор: Faraon   (01.12.2007 в 00:04)   письмо автору
 
   для: 27   (30.11.2007 в 19:56)
 

Итересно а прокси Вы собрались как применять? Вы из дома в все это хотите сделать или с локальной сети фирмы ?

   
 
 автор: 27   (01.12.2007 в 01:40)   письмо автору
 
   для: Faraon   (01.12.2007 в 00:04)
 

из дома.

   
 
 автор: Faraon   (01.12.2007 в 01:56)   письмо автору
 
   для: 27   (01.12.2007 в 01:40)
 

А тогда прокси тут причем? Или Вы являетесь администратором сети провайдера?

   
 
 автор: 27   (01.12.2007 в 01:57)   письмо автору
 
   для: 27   (30.11.2007 в 19:56)
 

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

   
 
 автор: Faraon   (01.12.2007 в 02:03)   письмо автору
 
   для: 27   (01.12.2007 в 01:57)
 

Cron на хостингах по разному настраивается, в зависимости от хостинга. Вам надо уточнить в службе поддержки как именно у них настраивается

P.S. мой последний скрипт вам помог?

   
 
 автор: 27   (01.12.2007 в 02:06)   письмо автору
 
   для: Faraon   (01.12.2007 в 02:03)
 

через cpanel, с ним всё в порядке он работает.
думаю, что крон не поможет избежать блокировки...
что может помочь? просто там база большая, а взять её нужно единожды.

страницы для выдерки я и сам догадался, но если бы без Вашей помощи, то х*й я сам бы справился)

   
 
 автор: Faraon   (01.12.2007 в 02:25)   письмо автору
 
   для: 27   (01.12.2007 в 02:06)
 

Бан по какому принципу идет?
По количеству вхождений в определенный момент времени с одного ip?
Или как?

   
 
 автор: 27   (01.12.2007 в 02:29)   письмо автору
 
   для: Faraon   (01.12.2007 в 02:25)
 

знал бы прикуп, жил бы в сочи %)

   
 
 автор: Faraon   (01.12.2007 в 02:32)   письмо автору
 
   для: 27   (01.12.2007 в 02:29)
 

Здесь только один вариант можно попробовать, разбить запросы( не все сразу а постепенно), но это тоже может не помочь ;)

   
 
 автор: 27   (01.12.2007 в 02:35)   письмо автору
 
   для: Faraon   (01.12.2007 в 02:32)
 

да, это самое первое, что пришло на ум, за ночь коммунистический скрипт забрал около 5 тыс. записей, база порядка 50 тыс.....
Благодарю за помощь, очень выручили.

   
Rambler's Top100
вверх

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