SEO Spider .. enlarged

Vor Weihnachten war ich mit einer netten kleinen freelance Arbeit für eine Agentur beschäftigt .. hat auch was mit SEO zu tun .. nur darf ich noch nix drüber erzählen. Mal sehen vielleicht bekommen wir es im Januar / Februar online.

Nach Weihnachten hat mich dann der Seorch Scanner weiter beschäftigt. Anfang Dezember habe ich eine erste BETA online gestellt und dann auch gleich drei Bugfix Releases hinterher geschoben. Mittlerweile läuft er stabil und ich finde kaum noch nennenswerte Fehler.

Für 2013 habe ich mir gleich 2 neue Dinge vorgenommen.

1. WDF*P*IDF

Die Berechnung der Inverse-Document-Frequency. Seorch kann ja schon die WDF (Within-Document-Frequency) eines Keywords berechnen .. nun ist es durchaus interessant zu sehen wie sich das auf die weiteren Dokumente der Website verteilt.

Die inverse Dokumenthäufigkeit stellt die Bedeutung eines Keywords in Bezug auf die Gesamtmenge aller betrachteten Dokumente dar. Je mehr Dokumente es zu einem Keyword gibt, umso schwieriger wird die Erzeugung von Relevanz.

Am besten lest ihr das Ganze bei Karl Kratz.

2. Bigcrawls

Aktuell crawlt der Seorch Scanner, je nach Geschwindigkeit der Website die gecrawlt wird, zwischen 30 und 200 Seiten. Das reicht natürlich nicht und mein nächstes Ziel ist es mehrere 1000 Seiten einer Domain zu crawlen.

Damit habe ich auch testweise schon begonnen .. allerdings habe ich recht schnell bemerkt das ich in ein Speicherproblem laufe. Für jede gecrawlte Website wird ein großes DOM Objekt erzeugt, die Seite neu encodiert und die Daten die ich aus der Seite auslese müssen ja noch gespeichert werden. Das alles frisst natürlich RAM.

Die letzten 2 Tage habe ich damit zugebracht große Crawls zu starten und dann die Speicherauslastung meines Servers zu beobachten.

Ich habe gefühlte 100 Artikel gelesen wie man PHP dazu bringt wenig Speicher zu verbrauchen .. das meiste habe ich getestet und auch wieder verworfen .. da es nur zu marginalen Verbesserungen geführt hat.

Man kann in etwa sagen das pro gecrawlter Seite 1 MB RAM belegt wird (Was ich auch irgendwie für realistisch halte). Das ist unproblematisch bei 100 oder 200 Seiten. Bei tausenden von Seiten ist das aber kritisch da ich ja nicht unbegrenzt RAM zur Verfügung habe.

Meine Idee ist nun das in Chunks zu machen. Also immer nur 50 Seiten auf einmal zu crawlen .. die Ergebnisse in eine Datenbank zu speichern .. und auf Basis der gespeicherten Daten dann die nächsten 50 Seiten zu crawlen.

Ich bin mal gespannt ob das so funktioniert wie ich mir das vorstelle.