Недавно я рассказывал о способе, позволяющем обойти капчу Google , которую поисковик использует в случае получения большого числа похожих запросов с одного IP. За прошедшие две недели я придумал, как еще можно ускорить (и не только ускорить) парсинг выдачи Google, чем и хотел бы сейчас поделиться.
1. Используем прокси
Прием с кукисами и tcpdump действительно позволяет обойти защиту от ботов, однако он имеет несколько существенных недостатков. Во-первых, этот прием неудобный — нужно запускать снифер, проходить капчу, прописывать кукис. Во-вторых, он не надежен — кто знает, как долго тема будет оставаться рабочей? И наконец, способ накладывает ограничение на частоту посылки запросов.
Если бы мы слали запросы через http/socks прокси, ни одной из названных проблем у нас не было. Да, названных проблем мы бы избежали, однако получили бы пару новых. Обычно паблик-прокси медленные и быстро умирают. Потому использовать их мы не будем.
Вместо них я решил использовать анонимайзеры. Кто не в курсе, анонимайзеры — это веб-скрипты, предназначенные для скрытия IP, а также вырезания рекламы из страниц и некоторых других вещей. Пожалуй, самым известным анонимайзером в рунете является Anonymizer.Ru . В сети существуют тысячи анонимайзеров, самый полный список которых можно найти на Proxy.org . Большинство из них работают на скриптах Glype и PHPProxy .
Есть много причин, зачем люди создают сайты-анонимайзеры. Например, можно показывать в начале каждой просматриваемой страницы контекстную рекламу. Или банально собирать пароли от GMail и ВКонтакте. Однако это для нас сейчас не так важно, как то, что анонимайзеры обычно намного быстрее socks-прокси и редко бывают оффлайн. Так от чего бы не слать запросы к Google через них?
Что интересно, искать анонимайзеры мы будем также с помощью Google. Какая ирония. Вот простой запрос, позволяющий собрать список сайтов, на которых работает PHPProxy:
Строки Rotate13, Base64 и Strip находятся в верхней части страницы, созданной с помощью PHPProxy.
Как видно на скриншоте (знаю, что он мелковат, но видно же!), URL просматриваемой страницы передается PHPProxy в аргументе q закодированный в Base64 . Собрав пару десятков таких прокси, мы сможем слать все запросы к Google через них, без необходимости обходить капчу и делать задержки между запросами.
2. Генератор url запросов
Вместо того, чтобы при каждой новой задаче писать новый парсер Google, лучше написать универсальный парсер, принимающий на вход собственно запросы к ПС. А возьмем мы эти запросы откуда? Правильно, получим с помощью генератора запросов. Вот пример такого генератора:
use strict ;
my $query = » » Rotate13 «» «» Base64 «» «» Strip «» inurl:index.php?q=»» ;
for my $p ( 0 .. 9 ) {
for my $zone ( qw/.com .net .org .biz .info .de .ru/ ) {
my $q = «»$query site:$zone»» ;
$q =~ s/ /%20/g ;
print «»http://www.google.ru/search?q=»» .
«»$q&num=100&start=${p}00&filter=0 n «» ;
}
}
Правданаписать такой скрипт прощечем новый парсер? Кроме тогоработая со списком запросов мы можем:
- Перемешать его с помощью команды «cat list.txt | rl > rslt.txt». Посылая запросы вперемешку