Оптимизация web crawler на php

Discussion in 'PHP' started by artellab, 12 Nov 2012.

  1. artellab

    artellab New Member

    Joined:
    9 Jun 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Имеется php граббер нужной информации с сайтов. Работает с помощью curl_multi + phpQuery для DOM парсинга.
    30000 страниц грузит за 8 часов. Это нормально, или имеет смысл переписать на с++?

    Поясню, 30000 страниц - это все с одного сайта (домена), если же запустить параллельно еще 1 процесс на парсинг с другого домена - то думаю будет примерно не 8 а 9 часов, но уже 60000страниц.

    И как вообще работают web crawlers, - создают несколько потоков для скачивания с одного сайта или идут 1 поток на 1 сайт? Просто если сделать 5-10 потоков на 1 сайт, то он бывает виснет или кончается лимит соединений с БД.
     
  2. b3

    b3 Moderator

    Joined:
    5 Dec 2004
    Messages:
    2,041
    Likes Received:
    933
    Reputations:
    199
    Что-то нереально медленно
     
    _________________________
  3. foxinvisible

    foxinvisible Banned

    Joined:
    14 Oct 2012
    Messages:
    48
    Likes Received:
    13
    Reputations:
    10
    Это вообще не нормально.
     
  4. m00c0w

    m00c0w Banned

    Joined:
    25 Dec 2011
    Messages:
    103
    Likes Received:
    14
    Reputations:
    5
    тюю.... а почему бы не использовать python и библиотечку grub (spider)
    http://grablib.org/docs/spider/tutorial.html

    Как раз для таких вещей написано :)

    PS "30000 страниц грузит за 8 часов" - не нормально.
     
  5. artellab

    artellab New Member

    Joined:
    9 Jun 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Похоже сам сайт не отдает быстрее.. т.к. на с++ таже самая беда. Если взять 1000 разных доменов, то думаю будет все гораздо быстрее.
    И более 2х потоков не дает создать, сайт у них падает =(
     
  6. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    как писали выше, возможно дело в самом сайте. Если сайт медленно отдаёт контент, то и c++ тебя не спасёт. Либо у сайта медленный трейс до тебя, ищи другие точки.
    У меня параллельно несколько ботов пашут, весь рунет сканируют, бывают как встанут на медленных сайтах и пипец. 50 потоков только и спасают.
     
    _________________________
    2 people like this.
  7. artellab

    artellab New Member

    Joined:
    9 Jun 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    в 5 раз медленнее чем до ya.ru. Во сколько раз примерно увеличится скорость если бота пускать на том же хостере на котором висит этот сайт?
     
  8. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    Опять же, если сайт не нагруженный и сам не тормозит, значит проблема в трейсе, значит нужно искать другие точки.
    Кстати, а покажи опции curl`а. У тебя там не keep-alive случайно в паре с http/1.1
     
    _________________________
  9. artellab

    artellab New Member

    Joined:
    9 Jun 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Боле ничего не отправляю.
    таймаут 20 сек поставил, т.к. сайт тормозной, если выставить 1-3 отдает на 50-60% меньше страниц..
     
  10. Trinux

    Trinux Members of Antichat

    Joined:
    26 Nov 2004
    Messages:
    1,403
    Likes Received:
    296
    Reputations:
    364
    ну вот ты сам и ответил на свой вопрос )) c++ не поможет точно. попробуй трейсить из разных хостеров. Возможно дело в канале.
     
    _________________________
  11. artellab

    artellab New Member

    Joined:
    9 Jun 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Скорее в ограничениях их хостера, т.к. несколько потоков - и их сайт висит. =)

    И поэтому и возник у меня вопрос, стоит ли делать несколько потоков для выкачивания одного сайта? Как делают ПС, типа не ответила страница ну и не нужно значит ее в индекс помещать =) ? У меня-то инфа которая должна обязательно попасть, - для мониторинга это все делается.
     
  12. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    ТС, запрашивай сжатый gzip контент. Keep-alive эффективен почти всегда.
    ПС не парсят твой сайт в несколько потоков (зависит от масштаба сайта, конечно). Если робот не смог скачать какую то страницу - попробует скачать ее позже.
     
    #12 Chrome~, 12 Nov 2012
    Last edited: 12 Nov 2012
  13. artellab

    artellab New Member

    Joined:
    9 Jun 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    с разных мест чуть более 1млн страниц за 5.5 часов, правда при этом использовалось более 4Гб памяти, при больших объемах придется переписывать на с++ =)

    А пока, видимо, для каждого сайта нужно будет настраивать возможное кол-во потоков сканера. Сайтов не много, всего 15, и получается будет около 500-600 тыс. страниц.

    По поводу ПС вот что нашел:
    1 req/sec - 30.000 страниц также и получается, 8 часов.