Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Работа парсера
Форумы портала PHP.SU » » Вопросы новичков » Работа парсера

Страниц (1): [1]
 

1. rodionov12 - 06 Августа, 2011 - 13:15:35 - перейти к сообщению
Писал парсер с сайта (wowhead)
наткнулся на такую проблему:

PHP:
скопировать код в буфер обмена
  1.  
  2.         $spell_s='/\"id\"\:([0-9]+).\"learnedat\"\:([0-9]+).\"level\"\:([0-9]+),.*\"skill\"\:\[([0-9]+)\],.*,\"trainingcost\"\:([0-9]+)/';
  3.         $count=preg_match_all ($spell_s, $content, $matches);
  4.         print_r ($matches);
  5.  


выдаёт из множественного списка только первое значение. кроме последних двух (их он берёт с самой последней подходящей строки.

что я пробовал? заменял .* на [^{}]+ (в фигурных скобках заключены наборы значений), но безрезультатно. если сделать так:

PHP:
скопировать код в буфер обмена
  1.  
  2.         $spell_s='/\"id\"\:([0-9]+).\"learnedat\"\:([0-9]+).\"level\"\:([0-9]+)/';
  3.         $count=preg_match_all ($spell_s, $content, $matches);
  4.         print_r ($matches);
  5.  


то всё выводится.

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

PHP:
скопировать код в буфер обмена
  1.  
  2. $host="http://www.wowhead.com/";
  3.         set_time_limit(0);
  4.  
  5. function select() // функция для обрезания нужного нам фрагмента из данной строки
  6. {
  7. global $start, $content;
  8.                 $pos = strpos($content, $start);
  9.                 if ($pos) $content = substr($content, $pos);
  10.                 $pos = strpos($content, "}]});");
  11.                 if ($pos) $content = substr($content, 0, $pos);
  12. }
  13.  
  14.         $npc_id=$_POST["id"];
  15.  
  16.         // получаем содержимое страницы в виде строчки, для дальнейшей обработки и поиска
  17.                 $page="npc=" . $npc_id;
  18.                 $content=file_get_contents($host.$page);
  19.  
  20.         // далее идёт обрезание строки
  21.         $start="new Listview({template: 'spell', id: 'teaches-recipe',";
  22.         select();
  23.  
  24.         // ищем все заклинания
  25.         $spell_s='/\"id\"\:([0-9]+).\"learnedat\"\:([0-9]+).\"level\"\:([0-9]+),.*\"skill\"\:\[([0-9]+)\],.*,\"trainingcost\"\:([0-9]+)/';
  26.         $count=preg_match_all ($spell_s, $content, $matches);
  27.         print_r ($matches);


направьте на истинный путь Улыбка

 

Powered by ExBB FM 1.0 RC1