
SEO-Monitoring 2: Daten sammmeln
20. Februar 2008Wie beschrieben, das Ziel ist über jene Schnittstelle, die auch der Benutzer einsetzt – also einen Webbrowser – zu erfassen, was Google bezüglich bestimmter Suchergebnisse anzeigt. Dies erledigt das Skript get_google.pl:
#!/usr/bin/perl -w
# get_google.pl - query Google.at und speichere Ergebnis in eine Datei
# Rev. 0.6a # Copyright 2008 by Ingo Lantschner (ingo@boxbe.com) # http://ingo.lantschner.name # This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details. # You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. use strict;
use LWP::UserAgent;
use URI::Escape ('uri_escape');
use Time::localtime;
my $debug =1;
my @search = ( "foo+bar",
"foo",
"bar",
); ## Suchbegriff hier!
my $path_prefix = "./google-test";
my $heute = localtime;
my $epochensekunden = time();
my $browser = LWP::UserAgent->new;
$browser->agent("Mozilla Firefox");
# Verzeichnis anlegen ( ./<path_prefix>/JJJJ-MM-TT/)
chdir "/Users/ingo/Sites/seo/SEO-Monitoring/Versuch2"; # wegen Aufruf durch Apple-Skript
my $datum = sprintf("%04d-%02d-%02d", $heute->year+1900, $heute->mon+1, $heute->mday);
printf "$datumn" if $debug > 1;
my $path = $path_prefix . "/" . $datum;
print "$pathn" if $debug > 1;
if ( -d $path ) {
printf "Info: Verzeichnis $path existiert schon.n" if $debug > 0;
} else {
mkdir $path
or die "Fehler: Kann Verzeichnis $path nicht anlegen: $!";
}
foreach (@search) {
print "nSuchberiff: $_n" if $debug > 1;
my $store = $path . "/" . "$epochensekunden" . "_" . $heute->hour . "h" . $heute->min . "_" . "$_";
my $i = 0; # Zähler für Seiten
while ( ++$i < 11 ) {
my $file = $store . "_S$i.html"; # Seitennummer an Dateiname anhängen
print "Dateiname: $filen" if $debug > 0;
if ( $i == 1 ) { # Seite 1
my $response = $browser->get(
'http://www.google.at/search?hl=de&q=' .
uri_escape($_) .
'&btnG=Suche&meta=',
':content_file' => $file,
);
die "Error: ", $response->status_line
unless $response->is_success;
} else { # Seiten 2 bis ... (http://www.google.at/search?q=apartment+wien&hl=de&start=10&sa=N)
my $start = ($i - 1) * 10; # Startzahl: 10, 20, ... 100
print "Start: $startn" if $debug > 1;
my $response = $browser->get(
'http://www.google.at/search?q=' . uri_escape($_) . '&hl=de&start=' . $start . '&sa=N',
':content_file' => $file,
);
die "Error: ", $response->status_line
unless $response->is_success;
}
my $wartezeit = 6; # Warten nächste Seite
print "Wartezeit auf nächste Seite $i: $wartezeitn" if $debug > 1;
sleep $wartezeit;
}
my $wartezeit = 8; # Warten nach Suchbegriffwechsel
print "Wartezeit zum nächsten Suchbegriff: $wartezeitn" if $debug > 1;
sleep $wartezeit;
}
Hinweis: Vor dem Einsatz dieses Scripts, ist die Erlaubnis dazu von Google einzuholen!
Als Ergebnis erhalten wir im Verzeichnis, das mit
my $path_prefix = "./google-test";
definiert wurde jeden Tag ein neues Unterverzeichnis, das dann mit den HTML-Files gefüllt wird: Jede Abfrage (also jeweils 10 Suchergebnisse) in einer Datei. Das ist dann zum Parsen zwar eine echte Herausforderung, dafür hat diese Methode den Vorteil, dass sie auf den Voreinstellungen für Google beruht und daher die „User-Experience“ der meisten Benutzer exakt wiedergibt. Klar wäre es verlockend gewesen, sofort 100 Ergebnisse im Google anzeigen zu lassen. Nur verändert Google das Ranking auch abhängig davon, wie viele Ergebnisse je Seite man anzeigen lässt. Daher diese etwas mühsamere Methode.
Ausgewertet (parsing der HTML-Files) wird mit einem anderen Modul – diese Trennung halte ich für wichtig, weil so jederzeit auf die historischen Daten noch einmal zurück gegriffen werden kann.
[...] Lantschner’s ITblog Streifzüge durch die Welt der Informations Technologie « SEO-Monitoring 2: Daten sammmeln SEO-Monitoring 3: Daten auswerten 27. Februar 2008 Wie in “SEO-Monitoring 2: Daten [...]