Am ocol protecția de la bot în google, notele programatorului

Dacă ați încercat vreodată să scrie un parser problemă Google, probabil știți că are o serie de măsuri împotriva utilizării acestui motor de căutare. În această notă, voi vorbi despre câteva tehnici care permit ca aceste măsuri să fie ocolite.

Adăugare: Puțin mai convenabil, în opinia mea, modul de analiză a Google este descris în post și un pic mai mult despre Google Hack. Cu toate acestea, această notă este de asemenea interesantă, deci continuați să citiți!

Pentru a face nota mai vizibilă, am schițat un mic script în Perl:

/http\:\/\/(?:www\.)([0-9a-z-]+\.ru) \ / ig;
print STDERR ">>". # 40; site-uri scalare # 41;. "site-uri găsite \ n";
dacă nu # 40; site-uri scalare # 41; # 123;
print STDERR ">> dormit 60 de secunde. \ n";
somn 60;
goto NEW_ATTEMPT;
# 125;
imprimați "\ L $ _ \ E \ n" pentru # 40; @sites # 41; ;
somn 6;
# 125;
# 125;

Sarcina scenariului este de a obține o listă de câteva mii de site-uri aleatorii în zona ferată. În viitor, poate fi folosit pentru orice cercetare. De exemplu, puteți lua un eșantion de 10.000 de site-uri și puteți defini un CMS. care sunt folosite pe ele.

Deci, care sunt dificultățile care ne așteaptă atunci când analizăm emisiunea Google? În primul rând, este un test de utilizator-agent. Dacă este setat la "Wget / ...", motorul de căutare refuză să execute interogarea. În al doilea rând - captcha. Dacă accesați prea des Google cu solicitări similare, utilizatorul este redirecționat către sorry.google.com, unde acesta este rugat să introducă numerele din imagine. În al treilea rând, cu un număr mare de solicitări dintr-un singur IP, sistemul poate cere să i se dea câteva minute să se odihnească, chiar dacă am trecut de captcha.

Prima problemă pentru a rezolva este foarte simplu - trebuie doar să se uite User-agent al browser-ului și configurați instrumentul adecvat prin care se încarcă pagina (wget, curl, rasul, ...). De obicei folosesc wget în scripturile mele, care pot fi deghizate ca firefox cu opțiunea -user-agent.

Cu CAPTCHA, este ceva mai complicat. Scrieți recunoașterea dvs. - sarcina este foarte dificilă, deși rezolvabilă. Dar, din fericire, nu trebuie să rupeți captcha - doar treceți prin ea o dată. Mai întâi curățăm cookie-urile. Pentru a lucra cu modulele cookie, folosesc pluginul Addon Monster Cookie:

Am ocol protecția de la bot în google, notele programatorului

Apoi începem parserul nostru și așteptăm până când Google începe să jure că solicitările noastre amintesc în mod suspicios de activitatea virușilor de calculator.


interogare = 11, pagina = 0
>> Au fost gasite 0 site-uri
>> dormit 60 de secunde.
^ C

Oprim parserul și introduceți o interogare în Google. Browserul ar trebui să arate ceva de genul:

Am ocol protecția de la bot în google, notele programatorului

Nu umple nimic, rulați tcpdump din rădăcină:

tcpdump -A cu 1500 dst google.com și port 80

Opțiunea -A înseamnă că pachetele interceptate trebuie să fie afișate sub formă de text, "-s 1500" - că pentru fiecare pachet ar trebui afișate doar primii 1500 de octeți (în mod implicit - 68). Dacă luăm în considerare faptul că aceasta este dimensiunea maximă permisă a pachetelor în rețelele Ethernet, le vom vedea în întregime. Restul echipei este de înțeles.

Treceți prin captcha, opriți tcpdump și căutați pachetele interceptate de cookie-uri:

Eliminăm din solicitarea HTTP un cookie (Cookie: ...) și îl scriem în scriptul nostru:

$ opt. = "--na cookie-uri" - cookie-ul principal: S = sorry = BZXzL3t3l_-lBy59IEcOPQ; "";

Asta e tot - Captcha, indiferent ce a fost! Este uimitor faptul că Google nu cere să treacă din nou din când în când. Poate calculul să fie pentru durata de viață a unui cookie?

Și ultima problemă este când Google începe să producă pagini ca cea prezentată în captura de ecran anterioară, doar fără captură. Are două soluții - fie să întârzie întârzierile între apelurile către Google (vedeți codul de script), fie, dacă timpul rulează, să lucreze prin lista proxy.

Mi se pare că în cazul nostru nu este niciunde să ne grăbim - puteți lăsa parserul să lucreze noaptea, iar în dimineața obține o listă de câteva mii de site-uri. Apropo, dacă cineva are nevoie de această listă, aici este.

Îți place postul? Trimiteți-le altora:

(JS trebuie să fie activată)