PHP . SU
Программирование на PHP, MySQL и другие веб-технологии
Без описания
Поиск в теме | Версия для печати
romanov
Отправлено: 24 Апреля, 2012 - 09:27:17
Гость
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
Все доброго времени суток.
Опять поднимаю эту тему, потомучто не могу справиться с этой задачей.
Суть проблемы: Занимаюсь парсингом сайта, сначала достаю все ссылки главной страницы каталога на сайте( их около 560 ), для каждой ссылки рекурсивно вызывается функция (parsing_page) , которая выбирает способ парсинга для ссылок второго уровня каталога, но до этого дело не доходит т.к. браузер грузится пока его не остановишь.
Вот код:
CODE (
php ):
скопировать код в буфер обмена
require_once ( "simple_html_dom.php" ) ;
$arr = array ( '/goods/catalog/cat/' ) ;
parsing_page( 'http://www.merlion.ru/goods/catalog/cat/' ) ;
function parsing_page( $url )
{
preg_match ( '#(/goods/catalog/cat/)#i' , $path_url [ 'path' ] , $pathmain ) ;
preg_match ( '#(/goods/catalog/cat/\w+/\w+/)#i' , $path_url [ 'path' ] , $pathcat ) ; preg_match ( '#(/goods/catalog/product/\d+/)#i' , $path_url [ 'path' ] , $pathdetail ) ;
$merl = file_get_html( $url ) ;
switch ( $path_url [ 'path' ] ) :
case $pathmain [ 0] :
foreach ( $merl -> find ( 'div[class="catalog_link"]' ) as $main_container ) :
$h3 = $main_container -> find ( "h3" ) ;
#echo $h3[0];
foreach ( $main_container -> find ( 'ul[class="catalog_list"] li ul' ) as $ul ) :
foreach ( $ul -> find ( 'a' ) as $li ) :
#echo $li->href."<br>";
if ( in_array ( $li -> href , $GLOBALS [ 'arr' ] ) ) continue ; $GLOBALS [ 'arr' ] [ ] = $li -> href ;
#$mas2[]="http://merlion.ru".$li->href;
parsing_page( "http://www.merlion.ru" . $li -> href ) ;
endforeach ;
endforeach ;
endforeach ;
break ;
case $pathcat [ 0] :
echo "KO<br>" ;
break ;
endswitch ;
}
Отредактировано модератором: Мелкий, 24 Апреля, 2012 - 10:20:00
romanov
Отправлено: 26 Апреля, 2012 - 18:05:19
Гость
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
уже использовал циклы вместо рекурсии не помогает
ну типа:
MAXUS
Отправлено: 02 Мая, 2012 - 23:26:47
Посетитель
Покинул форум
Сообщений всего: 329
Дата рег-ции: Апр. 2011
Помог: 7 раз(а)
romanov пишет: уже использовал циклы вместо рекурсии не помогает
ну типа:
Блин, я те готов был помочь, о ты слушать не захотел. И проблему тебе объяснял. Щас готов работать конструктивно?
romanov
Отправлено: 03 Мая, 2012 - 09:47:23
Гость
Покинул форум
Сообщений всего: 112
Дата рег-ции: Нояб. 2011
Помог: 0 раз(а)
Всегда готов
Я тут немного функцию изменил
PHP:
скопировать код в буфер обмена
require_once ( "simple_html_dom.php" ) ;
// Вызываем функцию для главной страницы каталога сайта
$links = parsing_page( 'http://www.merlion.ru/goods/catalog/cat/' ) ;
#parsing_page("http://www.merlion.ru/goods/catalog/cat/j100/j10000/p1/");
function parsing_page( $url )
{
// выделяем из url страницы относительный путь
// переходим на case который достает ссылки с главной страницы каталога
preg_match ( '#(/goods/catalog/cat/)#i' , $path_url [ 'path' ] , $pathmain ) ;
// переходим на case который достает ссылки со страниц категорий
preg_match ( '#(/goods/catalog/cat/\w+/\w+/)#i' , $path_url [ 'path' ] , $pathcat ) ;
// переходим на case который достает ссылки с постраничной навигации
preg_match ( '#(/goods/catalog/cat/\w+/\w+/\w+/)#i' , $path_url [ 'path' ] , $pathpages ) ;
preg_match ( '#(/goods/catalog/product/\w+/)#i' , $path_url [ 'path' ] , $pathdetail ) ;
// получаем html страницы
$merl = file_get_html( $url ) ;
switch ( $path_url [ 'path' ] ) :
case $pathmain [ 0] :
foreach ( $merl -> find ( 'div[class="catalog_link"]' ) as $main_container ) :
$h3 = $main_container -> find ( "h3" ) ;
foreach ( $main_container -> find ( 'ul[class="catalog_list"] li ul' ) as $ul ) :
foreach ( $ul -> find ( 'a' ) as $li ) :
parsing_page( "http://www.merlion.ru" . $li -> href ) ;
#$main_links[] = "http://www.merlion.ru".$li->href;
endforeach ;
endforeach ;
endforeach ;
#return $main_links;
break ;
case $pathcat [ 0] :
if ( preg_match_all ( '#(/goods/catalog/cat/\w+/\w+/\w+/)#s' , $merl , $pages ) ) :
foreach ( $pages as $page => $pre_page ) :
foreach ( $pre_page as $new_page ) :
$mas_links [ ] = $new_page ;
endforeach ;
endforeach ;
foreach ( $unique_keys as $keys ) :
parsing_page( "http://www.merlion.ru" . $keys ) ;
#$mas2[] = "http://www.merlion.ru".$keys;
endforeach ;
endif ;
#return $mas2;
break ;
case $pathpages [ 0] :
echo "1" ;
/* if (preg_match_all('#(/goods/catalog/product/\w+/)#',$merl,$detail_links)):
$links_detail = array_unique($detail_links[0]);
foreach ($links_detail as $goods=>$goods_value):
#$mas_detail[] = "http://www.merlion.ru".$goods_value;
parsing_page("http://www.merlion.ru".$goods_value);
endforeach;
endif;*/
#return $mas_detail;
break ;
case $pathdetail [ 0] :
echo "ds" ;
$h1 = $merl -> find ( "h1" ) ;
echo $h1 [ 0] ;
break ;
endswitch ;
}
#foreach ($links as $return_values):
# $links2[] = parsing_page($return_values);
#endforeach;
#$newarr = array ( array("http://www.merlion.ru/goods/catalog/cat/e110/e11007/p1/"));
#foreach ($links2 as $return_keys=>$return_values_n):
# foreach ($return_values_n as $product_links):
# $links3[] = parsing_page($product_links);
# endforeach;
#endforeach;
#echo "<pre>"; print_r($links2); echo "</pre>";
(Отредактировано автором: 03 Мая, 2012 - 10:00:41)
Поиск в теме | Версия для печати
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Хранение данных, их вывод и обработка »
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
Powered by ExBB FM 1.0 RC1. InvisionExBB