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 »   

> Без описания
likvidator
Отправлено: 22 Марта, 2014 - 20:37:51
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


Есть большой xml файлик. Мы его парсим,достаем оттуда значение "id" для конкретного пользователя,
PHP:
скопировать код в буфер обмена
  1.  
  2. $user=simplexml_load_file('url.xml');
  3. foreach ($user->user as $character)

затем открываем персональную страницу каждого юзера и тянем оттуда необходимый контент
PHP:
скопировать код в буфер обмена
  1.  
  2. $file=file_get_contents("url/user_$character->id_user.html");
  3.  

Ну,собственно и сама проблема, юзеров около 1000...
 
 Top
teddy
Отправлено: 22 Марта, 2014 - 20:42:23
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


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




deleted.

(Отредактировано автором: 22 Марта, 2014 - 23:11:34)

 
 Top
likvidator
Отправлено: 22 Марта, 2014 - 20:55:42
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


Это парсится со стороннего сайта... Суть такая: там у них есть этот xml файлик тупо с id онлайн-юзеров. Вся нужная мне инфа от каждого пользователя находиться на его персональной странице... А мне нужно в базу свою заносить id этого пользователя и еще информацию с его личной страницы. Скажем парсер за 1 проход мне в бд занесет около 1000 записей. Переодически такая штука еще и повторяется... Конечно это производительность... На хостинге у меня это дело кончается "502 Bad Gateway"...
(Добавление)
Грубо говоря в этом файле три айдишника : 53, 78,1. Я начинаю парсить:
Ага,айди 1,откроем его страницу. Профессия - тракторист,запомнил
Айди 53,откроем его страницу. Профессия - нету,запомнил
Айди 78,откроем его страницу. Профессия - говнокодер. Есть.
Взяли и закинули все в бд. Правда там параметров будет больше,но не суть.
(Добавление)
http://habrahabr[dot]ru/post/68175/ - пока перевариваю.но что-то с трудом,если кто поможет - не откажусь

(Отредактировано автором: 07 Апреля, 2014 - 20:32:13)

 
 Top
teddy
Отправлено: 22 Марта, 2014 - 23:22:23
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


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




а.. теперь понял. помочь тогда к сожалению нечем
 
 Top
likvidator
Отправлено: 23 Марта, 2014 - 08:42:16
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


боже...мульти-курл прекрасен.... спарсил мне 1,5 к страниц за 2,5 сек.... В общем по теме: разобрался сам.
 
 Top
likvidator
Отправлено: 23 Марта, 2014 - 14:13:10
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


Хм...ну в итоге я получаю такой массив:
PHP:
скопировать код в буфер обмена
  1.  
  2. (
  3.     [0] => Array
  4.         (
  5.             [id] => SimpleXMLElement Object
  6.                 (
  7.                     [0] => 219033
  8.                 )
  9.             [login] => SimpleXMLElement Object
  10.                 (
  11.                     [0] => 0 I ДЕЖАВЮ I 0
  12.                 )
  13.             [lll] => SimpleXMLElement Object
  14.                 (
  15.                     [0] => 11
  16.                 )
  17.             [afk] => SimpleXMLElement Object
  18.                 (
  19.                     [0] => 0
  20.                 )
  21.             [ffff] => SimpleXMLElement Object
  22.                 (
  23.                 )
  24.             [pos] => SimpleXMLElement Object
  25.                 (
  26.                     [0] => Товарная биржа
  27.                 )
  28.             [cl] => SimpleXMLElement Object
  29.                 (
  30.                     [0] => 10
  31.                 )
  32.             [url] => http://_/user_219033.html
  33.             [rem] => 0
  34.             [alh] => 1
  35.             [kul] => 0
  36.             [mas] =>1
  37.             [lav] => 0
  38.             [naem] => 0
  39.             [soz] => 1
  40.         )
  41.     [1] => Array
  42.         (
  43.             [id] => SimpleXMLElement Object
  44.                 (
  45.                     [0] => 1618966
  46.                 )
  47.             [login] => SimpleXMLElement Object
  48.                 (
  49.                     [0] => 11витя
  50.                 )
  51.             [lll] => SimpleXMLElement Object
  52.                 (
  53.                     [0] => 2
  54.                 )
  55.             [afk] => SimpleXMLElement Object
  56.                 (
  57.                     [0] => 1
  58.                 )
  59.             [ffff] => SimpleXMLElement Object
  60.                 (
  61.                 )
  62.             [pos] => SimpleXMLElement Object
  63.                 (
  64.                     [0] => Устье Белой реки
  65.                 )
  66.             [cl] => SimpleXMLElement Object
  67.                 (
  68.                 )
  69.             [url] => http://_/user_1618966.html
  70.             [rem] => 0
  71.             [alh] => 0
  72.             [kul] => 0
  73.             [mas] => 0
  74.             [lav] => 0
  75.             [naem] => 0
  76.             [soz] => 0
  77.         )
  78.  
  79.  


Как запихнуть все это в бд? поля соответствуют индексам из массива.
 
 Top
teddy
Отправлено: 23 Марта, 2014 - 14:16:24
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


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




Наверное следует пройтись по массиву и подставить в запрос нужные значения в соответствии с названием полей? Закатив глазки
 
 Top
likvidator
Отправлено: 23 Марта, 2014 - 14:18:16
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


teddy пишет:
Наверное следует пройтись по массиву и подставить в запрос нужные значения в соответствии с названием полей?

Я правильно понял,что ты хочешь за один цикл сделать около 1000 инсертов?(столько примерно юзеров)
 
 Top
teddy
Отправлено: 23 Марта, 2014 - 14:25:30
Post Id


Участник


Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013  


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




1000 инсертов за раз это фигня - такую "нагрузку" может выдержать даже слабоватый сервак и не кашлянуть при этом.
 
 Top
likvidator
Отправлено: 23 Марта, 2014 - 14:28:02
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


teddy пишет:
1000 инсертов за раз это фигня - такую "нагрузку" может выдержать даже слабоватый сервак и не кашлянуть при этом.

Ну это-то возможно,но не знаю=) Вроде как бы есть возможность скармливать массивы сразу...
Ну да не буду тогда заморачиваться...
 
 Top
likvidator
Отправлено: 07 Апреля, 2014 - 17:28:36
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


Мда... Оказалось,что все не так уж и хорошо. Из 920 спарсенных страниц 500 с ошибкой(couldn't connect to host),хотя хост не меняется,не могу понять почему... Кодец:
PHP:
скопировать код в буфер обмена
  1.  
  2. //Набор дескриптор MULTI_CURL
  3. //Массив дескрипторов CURL
  4. $connectionArray = array();
  5. foreach($urlArray as $key => $url)
  6. {
  7.         $ch = curl_init();
  8.         curl_setopt($ch, CURLOPT_URL, $url);
  9.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  10.         //Добавляем обычный CURL дескриптор к набору дескрипторов MULTI_CURL
  11.         curl_multi_add_handle($mh, $ch);
  12.         //Формируем массив заданий
  13.         $connectionArray[$key] = $ch;
  14. }
  15. //Флаг указывающий идут ли еще какие либо действия
  16. $running = null;
  17. //Запускаем задания на выполнение
  18. do
  19. {
  20.         curl_multi_exec($mh, $running);
  21.  
  22. }while($running > 0); //Тут как раз ждем, пока все соединения не отработают
  23. foreach($connectionArray as $key => $ch)
  24. {        
  25.         $info = curl_getinfo($ch,CURLINFO_EFFECTIVE_URL); //так ддля примера
  26.         $file = curl_multi_getcontent($ch);
  27. // дальше работа с контентом,но т.к. больше 50% ошибок => и контент не получаем
  28.  

(Отредактировано автором: 07 Апреля, 2014 - 17:29:18)

 
 Top
likvidator
Отправлено: 07 Апреля, 2014 - 21:39:17
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2.      $mh = curl_multi_init();
  3.      $chs = array();
  4.      foreach ( $urls as $url ) {
  5.          $chs[] = ( $ch = curl_init() );
  6.          curl_setopt( $ch, CURLOPT_URL, $url );
  7.          curl_setopt( $ch, CURLOPT_HEADER, 0 );
  8.          // CURLOPT_RETURNTRANSFER - возвращать значение как результат функции, а не выводить в stdout
  9.          curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  10.          curl_multi_add_handle( $mh, $ch );
  11.      }
  12.      $prev_running = $running = null;
  13.      do {
  14.          curl_multi_exec( $mh, $running );
  15.          if ( $running != $prev_running ) {
  16.              // получаю информацию о текущих соединениях
  17.              $info = curl_multi_info_read( $mh );
  18.              if ( is_array( $info ) && ( $ch = $info['handle'] ) ) {
  19.                  // получаю содержимое загруженной страницы
  20.                  $file = curl_multi_getcontent( $ch );
  21.                  // тут обработка текста страницы
  22.                  print_R($info);
  23.                                  $t++;
  24.              }
  25.              // обновляю кешируемое число текущих активных соединений
  26.              $prev_running = $running;
  27.          }
  28.      } while ( $running > 0 );
  29.      foreach ( $chs as $ch ) {
  30.          curl_multi_remove_handle( $mh, $ch );
  31.          curl_close( $ch );
  32.      }
  33.      curl_multi_close($mh);
  34. echo "$i-$t";
  35.  

Выведет 949(всего урлов)-401(успешно)
 
 Top
likvidator
Отправлено: 10 Апреля, 2014 - 14:21:39
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


актуально...
 
 Top
Мелкий Супермодератор
Отправлено: 10 Апреля, 2014 - 14:38:55
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




likvidator пишет:
1,5 к страниц за 2,5 сек

А как себя будут вести ваши системы с нагрузкой за тысячу конкурентных запросов разом? Это вполне себе серьёзный хайлоад.


-----
PostgreSQL DBA
 
 Top
likvidator
Отправлено: 10 Апреля, 2014 - 14:47:11
Post Id


Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Март 2012  


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

[+]


Мелкий пишет:
likvidator пишет:
1,5 к страниц за 2,5 сек

А как себя будут вести ваши системы с нагрузкой за тысячу конкурентных запросов разом? Это вполне себе серьёзный хайлоад.

Так в том-то и проблема,даже задержка,скажем 100 мс - сути дела не менят...
И вообще,есть ли альтернативы? Или в моем варианте может не все так гладко...

(Отредактировано автором: 10 Апреля, 2014 - 15:31:05)

 
 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