Immer wieder werde ich gefragt wie man am besten die Google Suchergebnisse abfragt ohne dabei von Google gesperrt zu werden. In diesem kleinen Blogpost möchte ich ein paar Grundlegende Tipps zum scrapen der Ergebnisse geben die euch vielleicht helfen die Sperren zu umgehen.
- Verschiedene IP Adressen nutzen. Wer größere Datenmengen abfragen will kommt irgendwann nicht mehr um zu mehrere IP Adressen zum Abfragen zu verwenden. Entweder holt man sich einen Server mit mehreren IP Adressen oder nutzt anfänglich beispielweise Proxies oder Webproxies um die Suchergebnisse darüber abzufragen.
- Nicht wie eine Maschine arbeiten! Fang nicht an einfach die Google Suchergebnisseiten nach einander abzufragen sondern variiert, so dass mal die Erste Seite, dann die dritte und danach vielleicht erst die 2. Abgefragt wird.
- Macht auch mal Pause: Gerade wenn nur eine geringe Anzahl von IP Adressen oder vielleicht sogar nur eine vorhanden ist solltet ihr zwischen den Suchanfragen kleine Pausen einbauen. Dies könnt ihr in PHP mit dem Befehl sleep() machen. Wenn ihr es noch etwas erweitern wollt variiert auch bei der Zeit die gewartet wird, indem ihr einen zufälligen Wert zwischen 2-5 Sekunden nehmt.
<?php $random = rand(2,5); // Zufallszahl zwischen 2 und 5 sleep($random); // Für den Zeitraum $random schlafen ?>
- Nutzt alle Möglichkeiten von Befehlen und Einstellungsmöglichkeiten in Google selbst. Je nachdem welchen Zweck eure Abfragen bewirken könnt ihr diese unterschiedlich gestalten.
- Sofern ihr nur darauf abzielt eine große Menge an URLs in eine Datenbank aufzunehmen solltet ihr Abfragen mit 100 Ergebnissen machen – Geht schneller und spart damit Zeit
- Wenn ihr genaue Rankingabfragen machen wollt empfiehlt es sich 10er Abfragen zu machen! Die Ergebnisse bei 10er und 100er Abfragen können sich teilweise unterscheiden und ihr würdet damit evtl. verfälschte Ergebnisse bekommen.
- Fügt euren Abfragen einen individuellen User Agent hinzu. Sofern ihr die Ergebnisse von Google mittels eingebauten Funktionen wie file_get_contents() abfragt wird als User Agent „PHP“ übertragen (zumindest wenn es niemand in der php.ini angepasst hat). Nutzt lieber die Klasse Funktionen von CURL mit denen ihr den User Agent in den von einem Firefox Browser ändern könnt.
<?php $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; de; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3"); curl_setopt($ch, CURLOPT_URL, 'http://www.tenpixel.de'); $content = curl_exec($ch); curl_close ($ch ); ?>
- Testet im Kleinen bevor ihr anfangt hunderte oder tausende Abfragen an Google zu schicken. Google stellt uns einige kleine Hürden in den Weg wenn es um das Scrapen von Suchergebnissen geht. Mal nutzt Google Single Quotes, mal Double Quotes mal gar keine um die HTML Attribute zu umgeben. Mal werden die ausgehenden Links zum tracken mit einem onClick Versehen und mal nicht.
- Das was zuhause funktionierte kann auf einem Server nicht funktionieren – Deshalb, wenn eine Ausgabe nicht mehr funktioniert nicht verzweifeln sondern erst den Output von Google prüfen!
- Fehlerbehebung: Wenn Ihr es irgendwann mit dem Scrapen übertreibt bekommt ihr von Google eine entsprechende Mitteilung angezeigt, das automatische Abfragen erkannt wurden. Sofern ihr solch eine Seite angezeigt bekommt sollte eurer Script möglichst abbrechen und versuchen das Problem zu lösen.
- Zuhause könnt ihr selbst da Captcha auf der Seite eingeben um euren Zugang wieder freizuschalten oder ihr zieht kurz den Stecker am Router und hofft auf eine neue IP Adresse.
- Sofern ihr aber eine statische IP Adresse nutzt fällt zumindest das rausziehen weg da sich die IP Adresse nicht ändert. Hier hilft dann entweder warten und hoffen das Google die IP Adresse wieder freigibt oder das ihr das Captcha löst (Entweder per Hand, einer Captcha Breaker Software oder einem Dienstleister bei dem man Captchas über eine API lösen kann.
Das soll erstmal reichen. Wenn ihr Fragen oder Anregungen zu der Liste habt hinterlasst einfach ein Kommentar.
{ 2 comments }
Jo, macht alles Sinn, was ich hier lese. Gilt auch für andere Abfragen im größeren Stil (Yahoo & Co). Wobei man dort auch immer wieder auf IPs stößt, die von vornherein Probleme machen, da sich dort bereits weitere SEOs tummeln ;-)
Schonmal daran gedacht mit CURL den Session Cookie von Google mitzusenden? :)
Dann sind die Limits schnell vorbei ;)