Чем парсить

Тема в разделе "Как сделать...", создана пользователем Otto, 16 фев 2015.

  1. Otto

    Otto Нарушитель

    Регистр.:
    12 май 2008
    Сообщения:
    481
    Симпатии:
    158
    Нашёл старый скрипт парсера авто с сайта http://copart.com
    Парсер написан чисто PHP через Curl.

    Интересует какую библиотеку/фреймворк можно использовать что бы переписать парсер, какие плюсы при этом и прочии мелочи...

    спс.Ув.
    P.S. напр. http://www.inattack.ru/article/php-sravnenie-bibliotek-dlya-parsinga/641.html#.VOI-9PmUekE кто что пробовал?
     
    Последнее редактирование: 16 фев 2015
  2. warg

    warg Постоялец

    Регистр.:
    26 июн 2007
    Сообщения:
    122
    Симпатии:
    122
    Использовал PHPQuery и Simple HTML DOM, рекомендую PHPQuery.

    Плюсы - код получается компактный и более простой, как результат его потом гораздо легче расширять или
    изменять, например в случае если изменилась структура документа на целевом сайте.
     
  3. bigsylk

    bigsylk Писатель

    Регистр.:
    28 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Подскажите гуру, мне пионеру, как и чем забить в базу или с генерировать Xml
    из более чем 200.000 позиций наименований (товары). Уже и мульти curl пробовал, всё равно не то. Дайте хотя бы направление куда копать, но лучше пример какой-нибудь. Наименование позиций идут в json (item: [id, name, param1, description, param2]) со стороннего сервера. В общем предоставлено как API.
    и выдают они не одним массивом, а по странично... на одной странице по 100 элементов и получается всего страниц более 2000.

    уже неделю бьюсь и не могу догнать, как это к себе в базу перенести по быстрому и без потерь?
     
  4. bigsylk

    bigsylk Писатель

    Регистр.:
    28 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    На столько я уже отчаялся, что выдумал такое чудо
    HTML:
    
        function testAjax(p,n,a,b){
            $.ajax({
              url: './pp/p-'+p+'.php?pg_cn_a='+a+'&pg_cn_b='+b,
              success: function(data) {
                $('.results').append(data);
              }
            });
           
            returnAj(p,n,a,b);
        }
       
        function returnAj(p,n,a,b){
            if(n < cnt){
                n++;
                p++;
                if(p > 55){p = 0};
                a = a + 30;
                b = b + 30;
               
                setTimeout(testAjax(p,n,a,b),5000);
            }
        }
    Тут идёт одновременно запуск 50 скриптов обработчиков, которые в свою очередь обрабатывают по 30 ссылок.

    /pp/p-N.php где N - номер от 1 до 50

    в общем вот так я извратился над своей проблемой.

    Может кто-то направит меня и скажет правильно я делаю или есть куда проще дорожка?
     
  5. Mikhalich

    Mikhalich Создатель

    Регистр.:
    3 фев 2009
    Сообщения:
    47
    Симпатии:
    0
  6. bigsylk

    bigsylk Писатель

    Регистр.:
    28 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Видимо Вы не совсем поняли моё решение, оно намного лучше и быстрее этого:
    мне нужно, правильное и быстрое...
     
  7. Mikhalich

    Mikhalich Создатель

    Регистр.:
    3 фев 2009
    Сообщения:
    47
    Симпатии:
    0
    увы, быстрое не всегда правильное. извиняюсь за оффтоп.
     
  8. bigsylk

    bigsylk Писатель

    Регистр.:
    28 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Может кто-нибудь кинет мне подсказку по вышеупомянутой проблеме или ни кто не сталкивался с таким? Я до сих пор сижу на этом решении, другого пока не вижу...
     
  9. komyak

    komyak

    Регистр.:
    4 фев 2009
    Сообщения:
    482
    Симпатии:
    183
    bigsylk, чем мультикурл не угодил? Попробуй Роллинг класс.
    И все таки зависит от возможностей Вашего сервера. Запустить можно и в 100-200 потоков, в итоге за 2-3 минуты спарсите все. Или это долго?
     
  10. bigsylk

    bigsylk Писатель

    Регистр.:
    28 мар 2015
    Сообщения:
    2
    Симпатии:
    0
    Приветствую!!!
    Как раз его и использую только вот мультикурл сам захлёбывается, когда ему под 50 потоков закидываешь. В Моём примере я разбиваю потоки на 50 файлов с мультикурл по 20 потоков, но при помощи ajax. Пока на этом остановился... Правда приходится запускать всё ручками, а в идеале нужно это ставить на автоматический запуск (через cron)