Когда я начал продавать свою программу, я не думал что многие дорвейщики просто понятия не имеют о правильном парсинге поисковых систем. Я не ожидал, что придется объяснять казалось бы очевидные вещи практически каждому второму клиенту, поэтому решил составить эту инструкцию – надеюсь, найдете ее полезной.
Перед тем, как начинать сам процесс, естественно нужно подобрать качественные и как можно более объемные по количеству резов признаки. Это первая составляющая «скорости» парсера – ведь мы гонимся не за страницами/сек, а за новыми_линками/сек. Будь у тебя хоть терабитный канал и 10 серверов, но неправильно составлены запросы – хоть 5 лет собирай выдачу, резов них*я не будет. И не обвиняйте авторов своих программ – сначала убедитесь что вы выполнили свою часть верно. Вот один из диалогов с клиентом (ник указывать не буду, обезличенно, прошу не обижаться):
User: что то он подвисает когда слов много
User: а счас буду микшировать 614к словарь с 30 запросами, он не зависнет совсем?
Shadow: х*ясе ... 18.420.000 резов... Чето подвисает

) Да уж..
Shadow: ты что реально хочешь вытравить *20 миллионов запросов из поисковиков?
User: ну а как еще то:-)
Shadow: это знаешь сколько трафа?
Shadow: я никогда не думал что есть энтузиасты по 20 миллионов запросов делать. Честно в шоке.
Shadow: если 1 запрос через прокси будет занимать 10 секунд (что очень неплохой показатель с учетом множества таймаутов, запросов на мертвые и т.п.), то при парсинге в 20 потоков обработка 20 миллионов запросов займет 115 дней.
User: ну я тебе говорю нормальные парсеры так и работают, хрефер добавляет эти запросы на лету и в итоге он по такому же количеству запросов и выдирает ресы
Shadow: 20 миллионов – без остановки - НЕ РЕАЛЬНО. Это уже high tech какой то а не виндовая программа. Скорее винда ляжет чем парсинг закончится.
Shadow: приколи, а если 20 миллионов запросов в гуглю сделать, то понадобится 1.66 терабайта трафа.
User: посмотрел, хрефер съел 300гб..
Shadow: 300Гб ? Что то мне подсказывает что ты работаешь с msn

))
Shadow: сколько у тебя база для спама?
User: 300к форумов, 200к гестов
Shadow: Получается ты вытащил с гугля 3.800.000 страниц. Если считать что на странице 100 резов и она весил около 80к то это и есть 300Гб. Ты знаешь сколько в гугле всего адресов в индексе? 25 миллиардов. (
http://en.wikipedia.org/wiki/Google_search). При удачном сочетании запросов ты мог бы уже поиметь 3.800.000 * 100 = около 4 миллиардов адресов. ЭТО ШЕСТАЯ ЧАСТЬ ВСЕЙ БАЗЫ ГУГЛА

))) Приколи как можно проспамиться!
Shadow: Я только щаз понял что просчитался. По каждому запросу то до 10 серпов может быть. Это еще в 5-6 раз больше все цифры! Меняй признаки для вытравки ПОЛЮБОМУ!
В общем что посоветовать по признакам (я так называю запросы для вытравки).
1. Подбирать так, чтобы среди резов минимум 10-15% соответствовали искомому материалу. Не надо парсить на количество (авось попадется) – это дохлый номер. Что то конечно найдете, но времени и ресурсов на вытравку уничтожите море. Не говоря уже о чистке базы. Да и мало какие парсеры проживут в рабочем режиме более недели – это очень неплохой показатель с учетом той работы которую они выполняют. Про месяцы и миллионы запросов забудьте – берите головой а не количеством.
2. Подбирать так, чтобы выдача разнилась как можно сильнее.
3. Не замешивать запросы с доменными зонами, резов в которых всего менее миллиона (кол-во результатов по запросу site:зона).
4. Не использовать слова-вариаторы длинной менее 3-х символов, они все равно в стоп листе. Знаете стоп лист – удалите все слова вариаторы, которые там содержаться.
5. Не замешивать запросы со словами – вариаторами, если выдача по этому запросу не превышает 5к. Большинство из возможного вытравится при замесе с зонами.
6. Если количество резов в выдаче больше 20к – использовать редкие слова вариаторы. Например experience или children вместо game или online.
7. ПО ВОЗМОЖНОСТИ не использовать в запросах модификаторов типа inurl: link: и т.п. Гугл банит моментально если парсить без прокси. И не в том скорее всего дело, что они не хотят чтобы вы собирали такие результаты, а в том, что при таких запросах нагрузка не поисковик в сотни раз больше, чем без них. Кроме того такие запросы скорее всего не кешируются – что при многократных запросах сильно увеличивает нагрузку. Однако есть поисковики, не банящие вообще ни за что – к ним это правило не относится.
8. Составлять признаки для каждого поисковика в отдельности. Геморно, сам не всегда делаю, но результат намного выше. Существует много примеров когда в выдаче лива 10к резов, а гугль показывает всего 10-15 и наоборот.
9. Парсить все поисковки по раздельности и соответственно со своими признаками, иначе при автоматическом замешивании (подмешивание парсером налету) потеряете много времени на запросы в пустые серпы. Кроме того поисковики, которые не банят не надо парсить с прокси – скорость в десятки раз повышается.
Что прежде всего, что должен уметь парсер поисковиков?
1. Получить необходимую страницу не вызвав у поисковки подозрений, что это бот (транспортный уровень). (за скорость на этом этапе отвечаете только вы)
2. Обработать полученный контент, не упустив ни одной искомой ссылки. (за скоростьи качество отвечаете парсер)
3. Предоставить инструменты для обработки полученной коллекции ссылок. (парсер)
4. Какие то эксклюзивные навороты, облегчающие жизнь. (парсер)
Все. Кажется просто и элементарно реализовать, но на самом деле каждый этап состоит из множества «подзадач», качеством реализации которых и отличаются все существующие парсеры.
Мне кажется, программист даже с самыми кривыми руками НЕ сумеет написать скрипт, который будет парсить *менее 1000 линков в секунду, если исходный материал берется из локального файла. То есть 99.99% всей скорости – это скорость добывания самого контента - *страницы/сек. Рассматриваем вариант работы через прокси, потому как парсинг директом идет очень быстро но не всеми поисковками допускается. Поймите одно – будь это скрипт на пхп, программа на Делфи или супер быстрый код на асме – они все будут работать с одним и тем же прокси с одной и той же скоростью, миллисекунда в миллисекунду, ускорить прокси - невозможно. Однако можно сжать передаваемый трафик и выигрыш будет в десятки раз. Насколько мне известно, это (gzip сжатие) пока может делать только мой парсер (админы, не сочтите за рекламу).
Те кто говорит, «у меня 500 рабочих прокси» - чаще всего даже не подозревают, что реально рабочих на данный момент уже не больше 70% (хотя они и проверялись 10 мин назад), что ~50% из оставшихся уже забанены, и что при его расчетах оставшиеся 125 забанятся уже через 5-10 минут после начала парсинга. Не думайте ,что вы один этими прокси пользуетесь – это самая распространенная глупость. Я имею огромный опыт покупки прокси серверов, и знаю как они перепродаются. Обещания хозяина ботнета что эти прокси – эксклюзив чаще всего вранье. Покупайте прокси только у проверенных надежных продавцов, по рекомендации (ко мне не стучать за рекомендациями). И самое главное – НЕ ЗАГОНЯЙТЕ ПРОКСИ В БАН САМИ. Избежать забанивания прокси невозможно, но минимизировать – реально. Правильно рассчитывайте количество рабочих потоков.
Настраивайте парсер из расчета 5 ХОРОШИХ ПРОКСИ НА 1 РАБОЧИЙ ПОТОК. ЧЕМ МЕНЬШЕ У ВАС РАБОЧИХ ПРОКСИ, ТЕМ БЫСТРЕЕ ОНИ БУДУТ БАНИТЬСЯ. А это – лавинообразный процесс, который очень быстро приведет к тому что у вас не будет ни одного не забаненного прокси. Если ваш парсер умеет ждать новых прокси и не лупить впустую по страницам содержащим «поздравляем, вы забанены, пшли нах отсюда» - это хорошо. По крайней мере когда появятся новые прокси – процесс возобновится. Если не умеет – соберет все что успеет и до конца процесса будет пожирать траф и время посещая «страницы поздравления». В результате – линков будет – кот наплакал. Вы не довольны своим парсером, но на самом деле он то здесь причем?
И помните, что даже имея скорость парсинга в 100 серпов/сек реально вы можете иметь 0 линков/сек – ВСЕ ЗАВИСИТ ОТ ВАШИХ ЗАПРОСОВ. Если ваш парсер не глючит, не загружает процессор и не жрет память, если он не пропускает линки в серпе и всегда добирается до сдержимого – это хороший парсер. Лучше, чтобы парсер писал лог файл по каждому запросу в поисковик – сколько найдено линков всего и сколько из них добавлено в список (новых). Тогда вы в любой момент сможете сверить эти данные с реальными проверив вручную выдачу по этому запросу.
Возможно кто то использует другой подход, я поделился своими мыслями, надеюсь кому то поможет. Я считаю что лучше потратить 1гиг трафа и натравить 500к резов чем потратить на тоже самое 300 гигов. И далеко не все имеют возможность так небрежно относится к трафу.
И в завершение несколько фактов из практики, не претендую на достоверность – это мои личные выводы.
1. Не доверяйте цифрам, которые выдают вам поисковики. Они очень часто не соответствуют действительности.
2. Если вы увидели что в выдаче 5к результатов, не рассчитывайте вытравить их все. 50% - это хороший результат. Вытравить все – невозможно.
3. Не думайте что если поисковик сказал что резов 900, то вы всегда при проходе всего серпа увидите 900. В гугле, например, увидеть 850 при количестве резов в 1 миллион – нормальная практика.
4. Результаты 2-х одновременных парсингов одного и того же поисковика по одним и тем же запросам разнятся. Это не причина для претензий авторам программ.
Поискови как живой организм и в них постоянно что то происходит и меняется. Так и должно быть!
PS
Описание моего парсера в соседней ветке в СПАМе. Пусть это будет небольшая ненавязчивая реклама. Удачи, дорвейщики!