h1

SEO-Monitoring 2: Daten sammmeln

20. Februar 2008

Wie 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.

Advertisements

One comment

  1. […] 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 […]



Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: