Posts mit dem Label Web-Admin werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Web-Admin werden angezeigt. Alle Posts anzeigen

Page Rank Abfragen sind für SEOs und viele Webmaster die Lieblingsbeschäftigung. Thomas Lotze hat die berühmt berüchtigte WWW::Google::PageRank Library auf Python übertragen.

Download http://svn.thomas-lotze.de/public/googlepagerank/trunk.tar.gz

Leider ist das Python Modul nicht dokumentiert. Das Tool ist auch für die Kommando-Zeile gedacht. Allerdings bringt uns ein Blick auf das Starter-Script weiter ...


#!/usr/bin/env python
#
# Copyright (c) 2007 Thomas Lotze
# See also LICENSE.txt

"""Fetches page ranks for the given URLs from Google and prints them out.

Google page ranks range from 1 (unimportant) to 10 (important).
An empty page rank means Google has not yet assigned a rank to the URL.
"IO" instead of a page rank means there was an error contacting Google.
"RE" means Google's response could not be understood.
"""

import sys
import urllib
import tl.googlepagerank.interface as gpri


for target in sys.argv[1:]:
try:
rank = gpri.read_rank(urllib.urlopen(gpri.query_url(target)).read())
except IOError:
rank = "IO"
except ValueError:
rank = "RE"
else:
if not int(rank):
rank = ""

print "%2s %s" % (rank, target)


Daraus lässt sich wunderbar eine Klasse entwickeln, die anstatt einfach das Ergebnis auszugeben, eine Funktion enthält, die das Ergebnis in Dictionary ablegt.

Wer nicht die MaxMind Datenbank nutzen möchte und wem die Zuordnung einer IP zum Land genügt, der kann sich natürlich selbst eine entsprechende Datenbank aus den Zonen-DNS bauen. Es gibt dazu ein Python Script, das allerdings Fehler bei sechs TLD (GG, RS, JE, ME, IM, AX) ausgibt. Da ich erst einmal nachsehen musste, wo die Aland Insel (AX) liegt ... Aber ich werde noch einen Blick auf das Script werfen. Dramatisch kann der Fehler nicht sein, denn alle anderen Zuordnungen scheinen fehlerfrei zu funktionieren.

Download ip2cc-0.4.tar.gz

Wer sich auf Fehlersuche begeben möchte: Die DB bei CPan könnte hilfreich sein.

Es kann wirklich ein interessantes Projekt werden, der Log-File-Filter Loghetti. Momentan ist es ein Kommandozeilen-Tool, soll sich aber zu einem Framework entwickeln.

Was kann es? Was tut es? Wo gibt es ...?

Robots.txt Parser

Eingestellt von Unknown |

Parser für Robots.txt-Dateien werden immer wieder gebraucht, sei es zum Bau eines eigenen Webcrawlers oder zur Überprüfung, ob eine Unterseite von Webcrawlern erreicht werden kann. Python bringt dafür eine eigene Klasse mit. Im Grunde ist diese sehr gut in der Dokumentation beschrieben und ich gebe hier nur das Beispiel wieder, damit ich diese nicht selber vergesse.


>>> import robotparser
>>> rp = robotparser.RobotFileParser()
>>> rp.set_url("http://forum.spiegel.de/robots.txt")
>>> rp.read()
>>> rp.can_fetch('*', "http://forum.spiegel.de/forumdisplay.php?f=5")
False


Das Script gibt im konkreter Beispiel "False" zurück, denn das Forum ist gänzlich für Suchmaschinen gesperrt.

Der Code ist eigentlich selbsterklärend. Die Funktion rp.set_url nimmt als Parameter die URL zur Robots.txt auf.

Zwei Paramenter nimmt can_fetch auf: Der erste bezieht sich auf den Crawler, der zweite auf die abzufragende URL. Das Sternchen * ist der Platzhalter für alle Crawler. Der Rückgabewert ist "True", falls der angegebene Crawler die betreffende Seite lesen darf, "False" wenn nicht.

Hier noch ein Beispiel, das vielleicht besser passt.


>>> import robotparser
>>> rp = robotparser.RobotFileParser()
>>> rp.set_url("http://www.spiegel.de/robots.txt")
>>> rp.read()
>>> rp.can_fetch("Slurp", "http://www.spiegel.de/flash/0,5532,17440,00.html")
True
>>> rp.can_fetch("WebReaper","http://www.spiegel.de/flash/0,5532,17440,00.html")
False


Slurp (Yahoo!) darf natürlich die Hauptdomain (mit Ausnahmen) durchsuchen, der Webreaper ist ausgesperrt.

Beim Stöbern nach neuen Python-Modulen zum Geo-Targeting auf eine interessante Lösung gestoßen, die ich in einer ruhigen Minute (oh, ja ;) ) ausprobieren möchte. Für einen SEO kann es höchst interessant sein, in welchem Land sich ein Server befindet. (Nicht nur Google betreibt Geo-Targeting bis zum Exzess.)

Die Firma MaxMind stellt verschiedene Datenbanken in unterschiedlichen Lizenz-Modellen zur Verfügung, eine unter der Open Source Lizenz GPL. Das Interface unterstützt natürlich Python.

Live Ausprobieren:


In der kostenpflichtigen Version können sogar Netzwerke größerer Organistionen aufgelöst werden. Mir reicht jedoch wahrscheinlich die Aktualität und Umfang der Open Source Variante.

Eleganter in einen Online Service zu integrieren als die Einbindung von nslookup bei der Abfrage der IP Adresse ist das Ergebnis unter Nutzung des Low Level Interface sockets. Aber auch das ist unter Python keine Hexerei und mit wenigen Zeilen Code zu erledigen:


>>> import socket
>>> data = socket.gethostbyname("rentaseo.de")
>>> print data


Das Ergebnis lautet im konkreten Fall wie erwartet "85.214.39.237".

Wir kennen alle die recht gerne genutzten Dienste nslookup und whois. Unix / Linux Nutzer verwenden dies beiden Werkzeuge direkt in der Shell, weniger erfahrene Webmaster besuchen gerne entsprechende Online Angebote. Dabei ist nichts dabei, via Python einen solchen Service bereit zu stellen.

Python bietet mehrere Lösungsansätze. Da ich davon ausgehe, dass ein solcher Service auf einem Unix / Linux Server laufen wird, kann man einfach die beiden Kommandozeilen Werkzeuge direkt ansprechen. Die Grundstruktur dafür ist wirklich simpel:

Zuerst der Beispielcode für eine Whois-Abfrage ...


>>> import os
>>> data = os.popen("whois rentaseo.de").read()
>>> print data


... das im konkreten Fall zu folgender Ausgabe (Auszug) führt:


...

Domain: rentaseo.de
Domain-Ace: rentaseo.de
Nserver: server1-ns1.udagdns.net
Nserver: server1-ns2.udagdns.net
Nserver: server1-ns3.udagdns.net
Status: connect
Changed: 2006-11-29T22:27:49+01:00

[Holder]
Type: PERSON
Name: Matthias Suess
Address: Brunnleite 2
Pcode: 92421
City: Schwandorf
Country: DE
Changed: 2006-11-29T22:27:48+01:00

...


Wenn man sich die Arbeit macht, die Augabe der einzelnen Whois Server zu analysieren kann man deren Response auch noch durch einen Parser schicken und die Ergebnisausgabe noch richtig schön gestalten.

Eben so einfach gestaltet sich die Abfrage nach der IP Adresse einer Domain ...


>>> import os
>>> data = os.popen("nslookup rentaseo.de").read()
>>> print data


... das folgendes Ergebnis liefert:


Server: 193.254.160.1
Address: 193.254.160.1#53

Non-authoritative answer:
Name: rentaseo.de
Address: 85.214.39.237


Die Domain rentaseo.de ist unter der IP 85.214.39.237 ansprechbar.