Имеется php граббер нужной информации с сайтов. Работает с помощью curl_multi + phpQuery для DOM парсинга. 30000 страниц грузит за 8 часов. Это нормально, или имеет смысл переписать на с++? Поясню, 30000 страниц - это все с одного сайта (домена), если же запустить параллельно еще 1 процесс на парсинг с другого домена - то думаю будет примерно не 8 а 9 часов, но уже 60000страниц. И как вообще работают web crawlers, - создают несколько потоков для скачивания с одного сайта или идут 1 поток на 1 сайт? Просто если сделать 5-10 потоков на 1 сайт, то он бывает виснет или кончается лимит соединений с БД.
тюю.... а почему бы не использовать python и библиотечку grub (spider) http://grablib.org/docs/spider/tutorial.html Как раз для таких вещей написано PS "30000 страниц грузит за 8 часов" - не нормально.
Похоже сам сайт не отдает быстрее.. т.к. на с++ таже самая беда. Если взять 1000 разных доменов, то думаю будет все гораздо быстрее. И более 2х потоков не дает создать, сайт у них падает =(
как писали выше, возможно дело в самом сайте. Если сайт медленно отдаёт контент, то и c++ тебя не спасёт. Либо у сайта медленный трейс до тебя, ищи другие точки. У меня параллельно несколько ботов пашут, весь рунет сканируют, бывают как встанут на медленных сайтах и пипец. 50 потоков только и спасают.
в 5 раз медленнее чем до ya.ru. Во сколько раз примерно увеличится скорость если бота пускать на том же хостере на котором висит этот сайт?
Опять же, если сайт не нагруженный и сам не тормозит, значит проблема в трейсе, значит нужно искать другие точки. Кстати, а покажи опции curl`а. У тебя там не keep-alive случайно в паре с http/1.1
Боле ничего не отправляю. таймаут 20 сек поставил, т.к. сайт тормозной, если выставить 1-3 отдает на 50-60% меньше страниц..
ну вот ты сам и ответил на свой вопрос )) c++ не поможет точно. попробуй трейсить из разных хостеров. Возможно дело в канале.
Скорее в ограничениях их хостера, т.к. несколько потоков - и их сайт висит. =) И поэтому и возник у меня вопрос, стоит ли делать несколько потоков для выкачивания одного сайта? Как делают ПС, типа не ответила страница ну и не нужно значит ее в индекс помещать =) ? У меня-то инфа которая должна обязательно попасть, - для мониторинга это все делается.
ТС, запрашивай сжатый gzip контент. Keep-alive эффективен почти всегда. ПС не парсят твой сайт в несколько потоков (зависит от масштаба сайта, конечно). Если робот не смог скачать какую то страницу - попробует скачать ее позже.
с разных мест чуть более 1млн страниц за 5.5 часов, правда при этом использовалось более 4Гб памяти, при больших объемах придется переписывать на с++ =) А пока, видимо, для каждого сайта нужно будет настраивать возможное кол-во потоков сканера. Сайтов не много, всего 15, и получается будет около 500-600 тыс. страниц. По поводу ПС вот что нашел: 1 req/sec - 30.000 страниц также и получается, 8 часов.