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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Парсер не выводит контент!

 PHP.SU

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


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

> Без описания
Coder1994
Отправлено: 18 Июня, 2011 - 12:27:58
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Добрый день, пишу парсер на cURL
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. switch($_GET['act']){
  3. default:
  4. ?>
  5. <form method="post" action="mtt.php?act=search">
  6.  
  7. <p>Введите номер для поиска.</p>
  8.  
  9. <b>+7</b>
  10.  
  11. <select name="def" id="def">
  12.  
  13. <option value="900">900</option>
  14.  
  15. <option value="901">901</option>
  16.  
  17. <option value="902">902</option>
  18.  
  19. <option value="903">903</option>
  20.  
  21. <option value="904">904</option>
  22.  
  23. <option value="905">905</option>
  24.  
  25. <option value="906">906</option>
  26.  
  27. <option value="908">908</option>
  28.  
  29. <option value="909">909</option>
  30.  
  31. <option value="910">910</option>
  32.  
  33. <option value="911">911</option>
  34.  
  35. <option value="912">912</option>
  36.  
  37. <option value="913">913</option>
  38.  
  39. <option value="914">914</option>
  40.  
  41. <option value="915">915</option>
  42.  
  43. <option value="916">916</option>
  44.  
  45. <option value="917">917</option>
  46.  
  47. <option value="918">918</option>
  48.  
  49. <option value="919">919</option>
  50.  
  51. <option value="920">920</option>
  52.  
  53. <option value="921">921</option>
  54.  
  55. <option value="922">922</option>
  56.  
  57. <option value="923">923</option>
  58.  
  59. <option value="924">924</option>
  60.  
  61. <option value="925">925</option>
  62.  
  63. <option value="926">926</option>
  64.  
  65. <option value="927">927</option>
  66.  
  67. <option value="928">928</option>
  68.  
  69. <option value="929">929</option>
  70.  
  71. <option value="930">930</option>
  72.  
  73. <option value="931">931</option>
  74.  
  75. <option value="932">932</option>
  76.  
  77. <option value="933">933</option>
  78.  
  79. <option value="934">934</option>
  80.  
  81. <option value="936">936</option>
  82.  
  83. <option value="937">937</option>
  84.  
  85. <option value="938">938</option>
  86.  
  87. <option value="950">950</option>
  88.  
  89. <option value="951">951</option>
  90.  
  91. <option value="952">952</option>
  92.  
  93. <option value="953">953</option>
  94.  
  95. <option value="960">960</option>
  96.  
  97. <option value="961">961</option>
  98.  
  99. <option value="962">962</option>
  100.  
  101. <option value="963">963</option>
  102.  
  103. <option value="964">964</option>
  104.  
  105. <option value="965">965</option>
  106.  
  107. <option value="966">966</option>
  108.  
  109. <option value="967">967</option>
  110.  
  111. <option value="968">968</option>
  112.  
  113. <option value="980">980</option>
  114.  
  115. <option value="981">981</option>
  116.  
  117. <option value="982">982</option>
  118.  
  119. <option value="983">983</option>
  120.  
  121. <option value="984">984</option>
  122.  
  123. <option value="985">985</option>
  124.  
  125. <option value="987">987</option>
  126.  
  127. <option value="988">988</option>
  128.  
  129. <option value="989">989</option>
  130.  
  131. <option value="997">997</option></select>
  132.  
  133. <input name="number" id="number" class="text" value="" maxlength="7">
  134. <INPUT TYPE="submit" value="Найти"></form>
  135.  
  136. <?
  137. break;
  138.  
  139. case 'search':
  140. function curl( $url )
  141. {
  142.         //$coockes = tempnam( '/tmp', 'cookie' );
  143.         $ch = curl_init( $url );
  144.         curl_setopt( $ch, CURLOPT_URL, $url );
  145.         curl_setopt( $ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; MRA 5.4 (build 02652); ru) Presto/2.2.15 Version/10.00" );
  146.         curl_setopt( $ch, CURLOPT_REFERER, "http://www.mtt.ru/info/def/index.wbp" );
  147.         curl_setopt( $ch, CURLOPT_HEADER, false );
  148.         //curl_setopt( $ch, CURLOPT_COOKIEJAR, $coockes );
  149.         //curl_setopt( $ch, CURLOPT_COOKIEFILE, $coockes );
  150.         curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  151.         //curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  152.         $html = curl_exec( $ch );
  153.         curl_close( $ch );
  154.         return $html;
  155. }  
  156.  
  157. $page_text = curl( "http://www.mtt.ru/info/def/index.wbp?def=" . $_POST['def'] . "&number=" . $_POST['number'] . "&region=&standard=&date=&operator=" );
  158. preg_match_all( '|<tr class="last">(.+?)</tr>|i', $page_text , $s );
  159. $s = count( $s[1] )-1;
  160. $e = 0;
  161. while ( $e <= $s ) {
  162.         $e++;
  163.                 echo $s[1][$e];
  164. }
  165. //echo $page_text;
  166. break;
  167. }
  168. ?>

По каким-то причинам, неизвестным мне он не выводит контент.

(Отредактировано автором: 18 Июня, 2011 - 12:29:06)

 
 Top
Slavenin
Отправлено: 18 Июня, 2011 - 12:40:06
Post Id



Посетитель


Покинул форум
Сообщений всего: 285
Дата рег-ции: Май 2010  
Откуда: Тверь


Помог: 4 раз(а)




буквально вчера читал очень интересную статью про curl и сокеты, может стоит попробовать организовать что-то подобное? http://job-interview[dot]ru/articles/post/62 Улыбка
 
 Top
Coder1994
Отправлено: 18 Июня, 2011 - 12:43:46
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Slavenin пишет:
буквально вчера читал очень интересную статью про curl и сокеты, может стоит попробовать организовать что-то подобное? http://job-interview[dot]ru/articles/post/62 Улыбка

В моём случае проблема где-то в регулярном выражении.
Хотя я пытался обрезать лишний html-код через str_replace, но ничего не вышло. Почему? - Для меня это осталось загадкой.
Будут какие-нибудь предложения?

(Отредактировано автором: 18 Июня, 2011 - 14:09:19)

 
 Top
LIME
Отправлено: 18 Июня, 2011 - 15:34:38
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




curl вроде массив возвращает
не строку
(Добавление)
а в preg_match_all() строка ожидается
(Добавление)
к томуже тут вроде простое выражение может без регулярки обойтись?
строковые функции ведь быстрее
типа strpos() итд
 
 Top
vsll
Отправлено: 18 Июня, 2011 - 16:04:09
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Вы просто загрузить ваш url (CURLOPT_RETURNTRANSFER, 0) пытались?
попробуйте для preg_match_all указать многострочный поиск /m

PHP:
скопировать код в буфер обмена
  1. if(curl_errno($ch)) {
  2.                         echo "cURL notice: <strong>(".curl_errno($ch).")</strong> ".curl_error($ch)."....... ";
  3.                 }

вставьте перед curl_close($ch);

(Отредактировано автором: 18 Июня, 2011 - 16:10:19)

 
 Top
Coder1994
Отправлено: 18 Июня, 2011 - 16:35:31
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Vasiliya пишет:
Вы просто загрузить ваш url (CURLOPT_RETURNTRANSFER, 0) пытались?
попробуйте для preg_match_all указать многострочный поиск /m

PHP:
скопировать код в буфер обмена
  1. if(curl_errno($ch)) {
  2.                         echo "cURL notice: <strong>(".curl_errno($ch).")</strong> ".curl_error($ch)."....... ";
  3.                 }

вставьте перед curl_close($ch);

да пытался, всё грузится.
а что касается preg_match_all, пустая страница.
PHP:
скопировать код в буфер обмена
  1. case 'search':
  2. function curl( $url )
  3. {
  4.         //$coockes = tempnam( '/tmp', 'cookie' );
  5.         $ch = curl_init( $url );
  6.         curl_setopt( $ch, CURLOPT_URL, $url );
  7.         curl_setopt( $ch, CURLOPT_USERAGENT, "Opera/9.80 (Windows NT 5.1; U; MRA 5.4 (build 02652); ru) Presto/2.2.15 Version/10.00" );
  8.         curl_setopt( $ch, CURLOPT_REFERER, "http://www.mtt.ru/info/def/index.wbp" );
  9.         curl_setopt( $ch, CURLOPT_HEADER, false );
  10.         //curl_setopt( $ch, CURLOPT_COOKIEJAR, $coockes );
  11.         //curl_setopt( $ch, CURLOPT_COOKIEFILE, $coockes );
  12.         curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  13.         //curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  14.         $html = curl_exec( $ch );
  15.                 if(curl_errno($ch)) {
  16.                         echo "cURL notice: <strong>(".curl_errno($ch).")</strong> ".curl_error($ch)."....... ";
  17.                 }
  18.         curl_close( $ch );
  19.         return $html;
  20. }  
  21.  
  22. $page_text = curl( "http://www.mtt.ru/info/def/index.wbp?def=$_POST[def]&number=$_POST[number]&region=&standard=&date=&operator=" );
  23. preg_match_all( '/<tr class="last">(.+?)<\/tr>/m', $page_text , $s );
  24. $s = count( $s[1] )-1;
  25. $e = 0;
  26. while ( $e <= $s ) {
  27.         $e++;
  28.                 echo $s[1][$e];
  29.                
  30. }
  31. //echo $page_text;
  32. break;

(Отредактировано автором: 18 Июня, 2011 - 16:35:58)

 
 Top
vsll
Отправлено: 18 Июня, 2011 - 16:59:43
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




(.+?)- не совсем понятно что именно нужно, если то что между tr и /tr, то
PHP:
скопировать код в буфер обмена
  1. preg_match_all( '/<tr[^>]+class="last"[^>]*>([^<\/tr]*)/m', $page_text , $s );

(Отредактировано автором: 18 Июня, 2011 - 17:04:50)

 
 Top
Coder1994
Отправлено: 19 Июня, 2011 - 17:47:42
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Vasiliya пишет:
(.+?)- не совсем понятно что именно нужно, если то что между tr и /tr, то
PHP:
скопировать код в буфер обмена
  1. preg_match_all( '/<tr[^>]+class="last"[^>]*>([^<\/tr]*)/m', $page_text , $s );

Это вывело - Array; при попытке посчитать элементы массива получилось 0, а должно 1)
 
 Top
vsll
Отправлено: 19 Июня, 2011 - 18:05:59
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




скопируйте сюда весь ваш вывод в том числе отчёт по ошибкам курл если есть
 
 Top
Coder1994
Отправлено: 19 Июня, 2011 - 18:12:59
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Кое-что получилось, вот что var_dump вывел: array(2) { [0]=> array(1) { [0]=> string(19) " " } [1]=> array(1) { [0]=> string(2) " " } }
посчитал переменную s, всё как надо, она одна.
Только вот теперь вывести бы её содержимое (выводит Array)
 
 Top
vsll
Отправлено: 19 Июня, 2011 - 18:45:43
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




Coder1994 пишет:
string(19) " "

у вас preg_match_all ранее нормально работала?
если стоит длина строки = 19, а в кавычках пусто, странно...
нулевым массивом должна идти строка таблицы вместе с содержимым
а первым массивом уже содержимое строки, там тоже длина 2, а не 0
 
 Top
Coder1994
Отправлено: 19 Июня, 2011 - 18:52:45
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Vasiliya пишет:
Coder1994 пишет:
string(19) " "

у вас preg_match_all ранее нормально работала?
если стоит длина строки = 19, а в кавычках пусто, странно...
нулевым массивом должна идти строка таблицы вместе с содержимым
а первым массивом уже содержимое строки, там тоже длина 2, а не 0

да, нормально, вот исходный код выводимой страницы:
CODE (htmlphp):
скопировать код в буфер обмена
  1. array(2) {
  2.   [0]=>
  3.   array(1) {
  4.     [0]=>
  5.     string(19) "<tr class="last">
  6.  
  7. "
  8.   }
  9.   [1]=>
  10.   array(1) {
  11.     [0]=>
  12.     string(2) "
  13.  
  14. "
  15.   }
  16. }
 
 Top
vsll
Отправлено: 19 Июня, 2011 - 18:59:04
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. preg_match_all( '/<tr[^>]+class="last"[^>]*>([^<]*)<\/tr>/m', $page_text , $s );

хотя нет, тут надо подумать, как <td> включить попробуйте идея ясна, парсер ваш работает, только надо регулярку правильно записать
может как-то так
PHP:
скопировать код в буфер обмена
  1. preg_match_all( '/<tr[^>]+class="last"[^>]*>[<td[^>]>([^<]*)<\/td>]+<\/tr>/m', $page_text , $s );

(Отредактировано автором: 19 Июня, 2011 - 19:05:49)

 
 Top
Coder1994
Отправлено: 19 Июня, 2011 - 19:27:51
Post Id


Частый гость


Покинул форум
Сообщений всего: 213
Дата рег-ции: Май 2010  
Откуда: Россия, Ростов-на-Дону


Помог: 3 раз(а)




Vasiliya пишет:
PHP:
скопировать код в буфер обмена
  1. preg_match_all( '/<tr[^>]+class="last"[^>]*>([^<]*)<\/tr>/m', $page_text , $s );

хотя нет, тут надо подумать, как <td> включить попробуйте идея ясна, парсер ваш работает, только надо регулярку правильно записать
может как-то так
PHP:
скопировать код в буфер обмена
  1. preg_match_all( '/<tr[^>]+class="last"[^>]*>[<td[^>]>([^<]*)<\/td>]+<\/tr>/m', $page_text , $s );

вот вывод последней регулярки- array(2) { [0]=> array(0) { } [1]=> array(0) { } }
 
 Top
vsll
Отправлено: 19 Июня, 2011 - 19:30:33
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 530
Дата рег-ции: Февр. 2011  


Помог: 10 раз(а)




PHP:
скопировать код в буфер обмена
  1. preg_match_all( '/<tr[^>]+class="last"[^>]*>[<td[^>]*>([^<]*)<\/td>]+<\/tr>/m', $page_text , $s );

<td[^>]*> а так?)
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB