PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (8): « 1 2 3 4 5 [6] 7 8 »

> Найдено сообщений: 112
romanov Отправлено: 15 Марта, 2012 - 22:44:55 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
Вот листинг без рекурсивного вызова

echo $li->href возвращает ссылку вида /goods/catalog/cat/r202/k4343/, которая попадает под второе регулярное выражение и переходит во второй case.

Вы написали он зацикливается из-за того что выполняется первый case при рекурсивном вызове функции,я так не думаю потому что первый case реагирует на ссылку вида, http://www[dot]merlion[dot]ru/goods/catalog/cat/ которую мы передаем в функцию во второй строке листинга

PHP:
скопировать код в буфер обмена
  1.  
  2. parsing_page ('http://www.merlion.ru/goods/catalog/cat/');
  3.  
  4. function parsing_page($url)
  5.  
  6. {
  7.        
  8.         $mas = Array();
  9.         $path_url = parse_url($url);    
  10.        
  11.         preg_match('#(/goods/catalog/cat/)#i',         $path_url['path'], $pathmain);
  12.         preg_match('#(/goods/catalog/cat/\w+/\w+/)#i', $path_url['path'], $pathcat);
  13.         preg_match('#(/goods/catalog/product/\d+/)#i', $path_url['path'], $pathdetail);
  14.  
  15.         $merl = file_get_html($url);
  16.  
  17.         switch( $path_url['path'] ):
  18.         case $pathmain[0] :
  19.  
  20.         foreach ($merl->find('div[class="catalog_link"]') as $main_container):
  21.  
  22.                 $h3 = $main_container->find("h3");
  23.                 echo $h3[0];
  24.                 foreach ($main_container->find('ul[class="catalog_list"] li ul') as $ul):
  25.                         $sum = $ul->find('a');
  26.                         foreach($ul->find('a') as $li):
  27.                                 echo $li->href."<br>";
  28.                        
  29.                         endforeach;    
  30.                        
  31.                 endforeach;
  32.        
  33.         endforeach;
  34.        
  35.         break;
  36.        
  37.         case $pathcat[0]:
  38.                
  39.                
  40.                 echo "KO<br>";
  41.                
  42.                
  43.         break; 
  44.        
  45.        
  46. endswitch;
  47.  
  48. }
  49.  
  50.  
romanov Отправлено: 13 Марта, 2012 - 17:45:31 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
Да я вас понел, но здесь такой ситуации быть не может
romanov Отправлено: 13 Марта, 2012 - 17:37:34 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
Я правильно вас понимаю, то что перебираются все ссылки и происходит зацикливании , и они снова перебираются ? в массив $arr можно передать любое значение ?

Без массива $arr вроде скрипт сработал, после этого объявил этот массив и скрипт уже грузится 15 мин.
romanov Отправлено: 13 Марта, 2012 - 17:22:08 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
LIME, спасибо за ответ, но наверно вы не понимаете зачем нужен скрипт и как он работает

При первом вызове функции parsing_page ('http://www.merlion.ru/goods/catalog/cat/'), выполняется первый case, далее мы получаем ссылки на вторую страницу и в нем же происходит рекурсивный вызов функции для каждой ссылки, после рекурсивного вызова выполняется второй case где выводится echo "KO", до этого мой скрипт не доходит из-за того,что браузер грузится и скрипт не выполняется.

Ваш вариант не работает тоже,я не понимаю зачем эти ссылки добалять в массив, если при первом вызове скрипта их все равно нет в этом массиве. Нам надо после рекурсивного вызова функции для каждой ссылки попасть во второй case.
romanov Отправлено: 13 Марта, 2012 - 15:45:50 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
Еслм убрать рекурсивный вызов функции, то тогда все выводится, если рекурсивный вызов

оставить, то браузер показывает загрузку страницы до "бесконечности"
romanov Отправлено: 12 Марта, 2012 - 14:20:53 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
Если убрать рекурсивный вызов функции, то все выводится, а так браузер показывает что загружает страницу, все продолжается около 20 мин. , дальше остановил загрузку.
romanov Отправлено: 11 Марта, 2012 - 08:23:47 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
При рекурсивном обращении очень долго выполняется скрипт, оставлял на 20 мин. и ничего не происходило $li->href- возвращает /goods/catalog/cat/1001/1002/ путь до товара.
С вариантом где в цикле вызываем функцию тоже самое.
romanov Отправлено: 10 Марта, 2012 - 19:23:09 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
При выполнении первого case добавлял все ссылки в массив и потом перебирал их в цикле вызывая каждый раз эту функцию, но результат тот же. В переменой $mc содержаться все ссылки которые на первой странице, если в конце первого case добавить return $mas; Если я вас неправильно понял пожалуйста напишите ваш вариант кода очень надо

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $mc = parsing_page ('http://www.merlion.ru/goods/catalog/cat/');
  4.  
  5.  
  6. foreach ( $mc as $value_cats  ):
  7.  
  8. parsing_page ( $value_cats );
  9.  
  10. endforeach;
  11.  
  12.  
  13.  
  14.  
romanov Отправлено: 10 Марта, 2012 - 19:03:05 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 23
Просмотров: 7700
Всем доброго времени суток. Помогите пожалуйста решить проблему

При парсинге первой страницы сайта получаю ссылки на вторую страницу в первом case, при обработке этих ссылок ( их количество 513), при рекурсивном вызове этой же функции (строка 27) скрипт зависает навечно, подскажите как с этим справиться. После обработки ссылок первой страницы должен выполнится второй case (строка 38) Вот код:


PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  parsing_page ('http://www.merlion.ru/goods/catalog/cat/');
  4. function parsing_page($url)
  5.  
  6. {
  7.         $path_url = parse_url($url);    
  8.        
  9.         preg_match('#(/goods/catalog/cat/)#i',         $path_url['path'], $pathmain);
  10.         preg_match('#(/goods/catalog/cat/\w+/\w+/)#i', $path_url['path'], $pathcat);
  11.         preg_match('#(/goods/catalog/product/\d+/)#i', $path_url['path'], $pathdetail);
  12.  
  13.         $merl = file_get_html($url);
  14.  
  15.         switch( $path_url['path'] ):
  16.         case $pathmain[0] :
  17.  
  18.         foreach ($merl->find('div[class="catalog_link"]') as $main_container):
  19.  
  20.                 $h3 = $main_container->find("h3");
  21.                 echo $h3[0];
  22.                 foreach ($main_container->find('ul[class="catalog_list"] li ul') as $ul):
  23.        
  24.                         foreach($ul->find('a') as $li):
  25.                        
  26.                                 parsing_page( "http://www.merlion.ru".$li->href) ;  
  27.                                
  28.                        
  29.                         endforeach;    
  30.                        
  31.                 endforeach;
  32.        
  33.         endforeach;
  34.        
  35.         break;
  36.        
  37.         case $pathcat[0]:
  38.                
  39.                
  40.                 echo "KO";
  41.                
  42.                
  43.         break; 
  44.        
  45.        
  46. endswitch;
  47.  
  48. }
  49.  
  50.  
  51.  
  52.  
romanov Отправлено: 21 Февраля, 2012 - 14:22:32 • Тема: Парсинг сайта • Форум: Хранение данных, их вывод и обработка

Ответов: 0
Просмотров: 967
Всем добрый день я занимаюсь парсингом сайта его структура во вложении.

Проблема в том что во втором case когда парсим ссылки на конкретный товар парсер зависает навечно. Первая страница парсится нормально. Подскажите как разгрузить парсер или сделать по другому

Вот программный код:

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. <?
  4.  
  5. parsing_page ('http://site.ru/goods/catalog/cat/');
  6.  
  7.  
  8. function parsing_page($url)
  9.  
  10. {
  11.        
  12.     $path_url = parse_url($url);
  13.     $i = 0;
  14.     preg_match('#(/goods/catalog/cat/)#i',         $path_url['path'], $pathmain);
  15.     preg_match('#(/goods/catalog/cat/\w+/\w+/)#i', $path_url['path'], $pathcat);    
  16.     preg_match('#(/goods/catalog/product/\d+/)#i', $path_url['path'], $pathdetail);
  17.     $parsing_text = file_get_contents($url);
  18.  
  19.     switch( $path_url['path'] ):
  20.         case $pathmain[0] :
  21.          
  22.             $mcat = array();
  23.            
  24.             if( $parsing_text == FALSE )
  25.             {
  26.                 echo "Не удалось открыть страницу каталога";
  27.             }
  28.  
  29.             preg_match_all('#<div class=\'catalog_link\'><h3>.*?</h3><ul class=\'catalog_list\'><li><a href=\'\#\'>.*?</a><ul><li><a href=\'/goods/catalog/cat/\w+/\w+/\'>.*?</a></li></ul></li></ul>\s+?</div>#im',           
  30.                 $parsing_text,
  31.             $goodslist,
  32.             PREG_PATTERN_ORDER
  33.             );
  34.              #echo "<pre>"; print_r($goodslist[0]); echo "</pre>";
  35.            
  36.             foreach ($goodslist[0] as $categories =>$subkategories){
  37.                         preg_match_all ('#<h3>.*?</h3>#im',
  38.                         $subkategories,
  39.                         $main_categories,
  40.                                 PREG_PATTERN_ORDER
  41.                                 );
  42.                        
  43.                         echo "<pre>"; print_r($main_categories[0]); echo "</pre>";
  44.            
  45.                         preg_match_all ('#<ul class=\'catalog_list\'><li><a href=\'\#\'>.*?</a><ul><li><a href=\'/goods/catalog/cat/\w+/\w+/\'>.*?</a></li></ul></li></ul>#im',
  46.                         $subkategories,
  47.                         $sub_categories,
  48.                         PREG_PATTERN_ORDER
  49.                         );
  50.                        
  51.                         #echo "<pre>"; print_r($sub_categories[0]); echo "</pre>";
  52.                        
  53.                         foreach ( $sub_categories[0] as $key_category=>$valuecategory  ){
  54.                                
  55.                                 #echo "<pre>"; print_r($valuecategory); echo "</pre>";
  56.                                
  57.                                 preg_match_all ('#<a href=\'\#\'>(.*?)</a>#im',
  58.                                 $valuecategory,
  59.                                 $sub_categories2,
  60.                                 PREG_PATTERN_ORDER
  61.                                 );
  62.                         #echo "<pre>"; print_r($sub_categories2[0]); echo "</pre>";
  63.                        
  64.                                 preg_match_all ('#<a href=\'(/goods/catalog/cat/\w+/\w+/)\'>(.*?)</a>#im',
  65.                                 $valuecategory,
  66.                                 $sub_categories3,
  67.                                 PREG_PATTERN_ORDER
  68.                                 );
  69.                         #echo "<pre>"; print_r($sub_categories3[1]); echo "</pre>";
  70.                        
  71.                                 foreach ($sub_categories3[1] as $categories){
  72.                                        
  73.                                         parsing_page( "http://www.site.ru".$categories );
  74.                                        
  75.                                 }  
  76.  
  77.                         }              
  78.             }
  79.            
  80.             break;
  81.  
  82.             case $pathcat[0]:
  83.                
  84.                 preg_match_all('#<div><a href="http://site.ru/goods/catalog/product/\d+/.*?">.*?</a></div>#im',        
  85.                         $parsing_text,
  86.                 $goods_list,
  87.                 PREG_PATTERN_ORDER
  88.                 );
  89.                
  90.                 #echo "<pre>"; print_r ( $goods_list ); echo "</pre>";
  91.  
  92.                         foreach ( $goods_list as $goods_keys => $goods_values ){
  93.                        
  94.                                 foreach ($goods_values as $elements_keys => $elements_values){
  95.                                          #$i++;
  96.                                          preg_match ('#<a href="http://www.site.ru(/goods/catalog/product/\d+/).*?">#im',$elements_values, $href);
  97.                                                          #echo "http://www.site.ru".$href[1]."<br>";
  98.                                                          #if ($i>4) break;
  99.                                          parsing_page ( "http://www.site.ru".$href[1] );
  100.                                 }
  101.                     }
  102.             break;
  103.  
  104.             case $pathdetail[0]:
  105.                
  106.                 echo "OK";
  107.                 preg_match_all('#Код товара:.*?(\d+)#im',
  108.                 $parsing_text,
  109.                 $features,
  110.                 PREG_PATTERN_ORDER
  111.                 );
  112.                
  113.                 echo "<pre>"; print_r ( $features ); echo "</pre>";
  114.                                
  115.             break;     
  116.            
  117.                         default: echo "Страница не выбрана"; break;
  118.         endswitch;          
  119. }
  120. ?>
  121.  
  122.  
romanov Отправлено: 14 Февраля, 2012 - 14:25:57 • Тема: Разбор списка html • Форум: Регулярные выражения

Ответов: 2
Просмотров: 185
благодарю
romanov Отправлено: 14 Февраля, 2012 - 11:40:27 • Тема: Разбор списка html • Форум: Регулярные выражения

Ответов: 2
Просмотров: 185
Всем доброго времени суток, подскажите пожалуйста как можно разбить след.список при помощи рег. выражений

CODE (html):
скопировать код в буфер обмена
  1.  
  2. <ul class="catalog_list">
  3.      <li><a href="#">Электроинструменты</a>
  4.             <ul>
  5.                   <li><a href="/goods/catalog/cat/d125/d12500/">Дрели</a></li>
  6.                   <li><a href="/goods/catalog/cat/d125/d12504/">Лобзики</a></li>
  7.             </ul>                
  8.      </li>
  9. </ul>
  10.  


чтобы получился массив вида:

PHP:
скопировать код в буфер обмена
  1.  
  2. Array (  [0] =>Электроинструменты, [1] => Дрели, [2] => Лобзики );
  3.  
romanov Отправлено: 20 Декабря, 2011 - 18:31:52 • Тема: LIKE в выражение • Форум: Работа с СУБД

Ответов: 20
Просмотров: 4240
Передаю напрямую запрос в строку LIKE '%Юдина%' результат есть, через массив POST: Юдина LIKE '%$_POST[name]%' результат пустой,
romanov Отправлено: 20 Декабря, 2011 - 18:19:17 • Тема: LIKE в выражение • Форум: Работа с СУБД

Ответов: 20
Просмотров: 4240
ну да
romanov Отправлено: 20 Декабря, 2011 - 18:09:29 • Тема: LIKE в выражение • Форум: Работа с СУБД

Ответов: 20
Просмотров: 4240
ошибок sql нет, я так прописал с самого начала

Страниц (8): « 1 2 3 4 5 [6] 7 8 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB