WebcrawlerJS - Universität Freiburg

Transcription

WebcrawlerJS - Universität Freiburg
Albert-Ludwigs Universität Freiburg
WebcrawlerJS
Programmdokumentation
Malte Ahl
7. Oktober 2009
Inhaltsverzeichnis
1 WebcrawlerJS
1.1 Voraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Start des Suchdurchlaufs . . . . . . . . . . . . . . . . . . . . . . .
2
3
3
2 WebcrawlerJS Webinterface
6
3 Programmargumente für den WebcrawlerJS
7
1
Kapitel 1
WebcrawlerJS
Aktuelle Suchdienste bieten keine Möglichkeit Anfragen über die Struktur eines
JavaScript Skripts zu stellen, sondern erlauben lediglich eine Stringsuche. Der
WebcrawlerJS ist ein in Java geschriebenes Kommandozeilen Programm, welches mit Hilfe von Yahoo [Yah] und Google CodeSearch [Gooc] Javascript Dateien
aus dem Intenet herunterlädt und mit Hilfe von Mozillas Javascript Parser Rhino
[Rhia] in eine XML Darstellung umwandelt. Dabei spielt es keine Rolle wie oft
und mit welchen Argumenten der WebcrawlerJS ausgeführt wird: Werden neue
URL Adressen gefunden, versucht der WebcrawlerJS die zugehörigen Dateien
herunter zu laden und dem vorhandenen Datenbestand hinzu zu fügen, wenn
es sich dabei um Javascript Dateien oder HTML Dateien mit eingebetteten
Javascript handelt, ansonsten werden die URL Adressen verworfen 1 . Besonderheiten der jeweiligen Suchdienste bleiben vor dem Benutzer transparent. Auf die
resultierenden XML Dateien kann der Benutzer mit einem Dateimanager oder
über den Berkeley XML Datenbankmanger DBXML von Oracle [DBX] zugreifen.
Für den Zugriff über einen Webbrowser steht ein Webinterface zur Verfügung
welches mit Hilfe von PHP die XML Dateien mit ihren zugehörigen Javascript
Code verlinkt, statistische Übersichten über den Datenbestand zur Verfügung
stellt und XPATH Anfragen mit Hilfe von PHPs SimpleXML sowohl auf einzelnen Dateien, als auch auf dem gesamten Datenbestand ausführt. Das Webinterface steht unter [20009] öffentlich zur Verfügung und enthält derzeit einen
Datenbestand von 2455 Javascript Dateien, was 38955 Zeilen Code entspricht.
1 Der WebcrawlerJS merkt sich nur die URL Adressen von Dateien, die erfolgreich im Verzeichnis js/“des Hauptordners abgespeichert wurden. Verworfene URL Adressen werden erneut
”
geprüft, wenn z.B. der Startindex zurückgesetzt wird.
2
1.1
Voraussetzungen
,
Software
Java
Betriebssystem
Webbrowser
Webserver
Sprache
1.2
Anforderung
Der WebcrawlerJS lief bisher nur unter
Version 6 von Suns Java.
Der WebcrawlerJS wurde auf dem Linuxsystem Ubuntu(Jaunty Jackalope) entwickelt und getestet.
Das Webinterface des WebcrawlerJS verwendet HTML mit Framesets und UTF-8
codierung, Javascript, XSLT und CSS.
Das Webinterface sollte in einer Umgebung mit PHP 5 ausgeführt werden,
um XPATH Anfragen mit SimpleXML
stellen zu können. Unter dem Linuxsystem Ubuntu (Jaunty Jackalope) reicht
es, das Webinterface in das Verzeichnis /var/www “zu kopieren, die Zu”
griffsrechte entsprechend anzupassen und
die aktuellen PHP Pakete aus dem
Paketverwaltungssystem Synaptic herunterzuladen und zu installieren.
Quellcode, bzw. Textausgaben vom WebcrawlerJS und dem Webinterface sind in
Englisch
Start des Suchdurchlaufs
Der WebcrawlerJS verfügt über eine Reihe von Argumenten [Kap. ??,S. ??]
mit denen sich der Suchdurchlauf, aber auch die Umwandlung der Javascript
Dateien in XML steuern lässt. Um die Benutzung möglichst einfach zu halten, existiert neben dem WebcrawlerJS ein sogenanntes Webcrawler-Starterkit
”
“. Dieses enthält eine Reihe von Bash Skripten mit selbst erklärenden Namen, welche den WebcarwlerJS mit den entsprechenden Parametern starten.
Einen schnellen Eindruck von der Programmfunktionalität erhält man, wenn
man das Bash Skript start “in einer Kommandozeile ausführt. Damit legt der
”
WebcrawlerJS in dem aktuellen Verzeichnis einen Hauptordner mit dem Namen
WebcrawlerJS “an, der einige Unterordner besitzt, sucht über Yahoo die URL
”
Adressen von 100 Javascript Dateien und lädt diese von ihrem Ursprungsort
herunter, sofern sie vorhanden sind. Direkt im Anschluß wird die Umformung
der Javascript Dateien gestartet. In diesem Schritt werden auch die statistischen Informationen wie Anzahl an Code Zeilen und verwendeteten Javascriptelementen für das Webinterface ermittelt und die Dateien in der XML Datenbank
abgespeichert. Zum Schluß wird das Webinterface erzeugt. Informationen und
3
Fehlermeldungen werden in einer Logdatei im Hauptordner abgelegt. Wechselt
der Benutzter nun in den angelegten Hauptordner findet er die HTML Dateien
index.html “und statistic.html“. Verfügt das Linuxsystem über eine Apache
”
”
Installation mit PHP 5 kann der Benutzer einen symbolischen Link in dem Linux Verzeichnis /var/www/“auf diese index.html“erstellen und im Webbrowser
”
”
das Webinterface ohne weitere Konfiguartionsschritte öffnen und XPATH Anfragen über einzelne Dateien oder den gesamten Datenbestand stellen. Fehlt
eine PHP Installation, erhält der Benutzer einen schnellen Überblick über den
Datenbestand indem er die Datei statistic.html“in einem Webbrowser öffnet.
”
Diese entspricht einer PHP freien“Version der Startseite des Webinterface und
”
zeigt unter anderem auch an, wieviele von den 161 erkennbaren Javascriptelementen in dem aktuellen Datenbestand vorkommen.
Neben den beiden HTML Dateien befinden sich in dem Hauptordner die
Verzeichnisse XML“, DB“, js“, html“und token“, sowie natürlich die Logbücher
”
”
”
”
”
die bei jedem Programmstart erstellt werden und die Datei .urls“welche nicht
”
sichtbar ist und einige Meteinformationen über den Datenbestand enthält, sowie
alle URL Adressen aller Javascript Dateien die im genannten Verzeichnis js“
”
abgespeichert wurden, um ein erneutes Herunterladen bei weiteren Programmstarts zu vermeiden.
Der Benutzer hat nun die Möglichkeit, mit einem Dateimanager in den Ordner XML“zu navigieren um auf die erzeugten XML Dateien zuzugreifen. Diese
”
Methode ist aber nur für eine geringe Anzahl an Dateien zu empfehlen. Zuverlässiger ist hier der Zugriff über ein Konsolenprogramm, da dieses in der
Regel mit großen Dateimengen besser umgehen kann. Eine weitere Möglichkeit
auf die XML Dateien zuzugreifen erhält man, indem man in einer Konsole in das
Verzeichnis DB“wechselt. Dieses enthält die Binärdatei dbxml“, das Daten”
”
bankarchiv files.dbxml“, sowie die Textdatei query“und eine Readme. Mit
”
”
dem Befehl ./dbxml“startet man nun den DBXML Manager, was man daran
”
erkennt, dass sich der Eingabeprompt ändert. Gibt man nun den Befehl run
”
query “ein, listet der DBXML Manager alle URL Adressen auf, deren Javascript
Dateien erfolgreich von Rhino geparst und in eine XML Darstellung umgeformt
wurden. Dabei greift der DBXML Manager nicht auf die XML Dateien im Ordner XML/ “zu, sondern auf die Datei files.dbxml“, welche eine Kopie aller
”
”
XML Dateien in einer effizienteren Knotendarstellung enthält [DBX]. Die Anweisung, alle URL Adressen aufzulisten erhält der DBXML Manager über eine
XQuery Anfrage welche in der genannten Textdatei query“abgespeichert ist. Da
”
die Steuerung des DBXML Managers sehr einfach gehalten ist und zum Beispiel
nicht das Vor- und Zurücknavigieren erlaubt, ist es zu empfehlen, XQuery Anfragen und alle anderen Befehle in einer Textdatei wie der genannten abzuspeichern
und diese mit dem Befehl run [Textdatei]“im DBXML Manager auszuführen.
”
Auf die Javascript Dateien kann der Benutzer zugreifen, indem er im Hauptordner in das Verzeichnis js/“wechselt. Möchte er für weitere Programmstarts
”
Änderungen an der XML Struktur vornehmen, findet er im Hauptordner im
Verzeichnis token“zwei Textdateien mit den Namen TokenNameSettings.txt“und
”
”
XMLTextNodeSettings.txt“. In der ersten kann der Benutzer einen alternativen
”
4
Namen für alle Token der verwendeten XML Struktur einstellen indem er die
ID eines Tokens, gefolgt von einem Semikolon und einer neuen Bezeichnung in
eine neue Zeile einfügt. Die ID ist in der Datei Token.java“in der Javadoc unter
”
[Rhib] angegeben. Die zweite Textdatei im Verzeichnis token“legt fest, welche
”
XML Knoten einen Textknoten besitzten dürfen. Die Standarteinstellung, welche
Textknoten für STRING“, NUMBER“und NAME“erlaubt reicht aus. Sollen
”
”
”
auch Knoten anderen Tokentyps Textknoten enthalten dürfen, muss lediglich die
Token ID von [Rhib] in einer neuen Zeile angegeben werden.
Hinweis 1 (Einstellungsdateien) Sollen vor dem Start des Suchdurchlaufs
Einstellungen an der XML Struktur vorgenommen werden, kann der WebcrawlerJS mit dem Argument --tfiles aufgerufen werden. Es wird dann nur
die Ordnerstruktur und die Einstellungsdateien angelegt und kein Suchdurchlauf
gestartet. Alternativ kann mit den Argumenten --tnames=[Pfadangabe] und -tvalues=[Pfadangabe] explizit auf Einstellungsdateien für alternative Token Namen und Textknoten Einstellungen hingewiesen werden.
Schlußendlich sei noch das Verzeichnis “html erwähnt, welches alle Dateien
”
des Webinterfaces enthält. Es benötigt den wenigsten Speicherplatz, beinhaltet jedoch eine sehr große Anzahl an Dateien, was eine Rolle spielt, wenn der
Datenbestand mit Hilfe des Webinterfaces auf einem Server veröffentlicht und
mit FTP oder SVN kopiert werden soll.
5
Kapitel 2
WebcrawlerJS Webinterface
Das Webinterface des WebcrawlerJS wird automatisch bei jedem Transformationsprozess des WebcrawlerJS neu angelegt. Mit Transformationsprozess ist
die Umwandlung der heruntergeladenen Javascript-Dateien in eine äquivalente
XML-Darstellung gemeint. Dieser Schritt schließt das Parsen der Javascript
Dateien mit dem Javascript Interpreter Rhino ein.
Das Webinterface kann ohne weitere Konfigurationsschritte auf einem Webserver mit einer PHP5 Instalation ausgeführt werden.
Unter [20009] ist eine aktuelle Version des Webinterface mit einem aktuellen
Datenbestand von 2455 Javascript-Dateien zu finden. 2455 Javascript-Dateien
entsprechen 38955 Zeilen Programmcode, wobei Kommentare mitgezählt wurden.
Über eine Eingabemaske lassen sich sowohl über einzelnen Dateien als auch
über dem ganzen Datenbestand XPAth-Anfrage stellen. Bei dem Stellen von
XPath-Anfragen müssen allerdings Besonderheiten des Rhino AST berücksichtigt
werden. So gilt eine For-In-Anweisung als Spezialfall einer For-Anweisung. Es
existiert zwar ein ELSE Token, dieser wird aber nicht verwendet. Statt dessen
wird eine Else-Verzweigung durch eine Zusätzliche Anweisung innerhalb eines
If-Knotens angegeben. Dies gilt auch für den SWITCH Token, dessen DEFAULTToken zwar existiert, aber ebenfalls, auf Grund alternativer Darstellungsmöglichkeiten,
nie verwendet wird. Außerdem existiert ein TYPEOFNAME Token, der laut
Quellcode für den Operator typeof verwendet werden soll, aber ebenfalls nicht
zum Einsatz kommt. Für den Operator typeof wird der Token TYPEOF verwendet.
6
Kapitel 3
Programmargumente für
den WebcrawlerJS
,
7
Argument
--help
--index
--limit=[zahl ≥1]
--yahoo
--google
--query=[Zeichenfolge]
--addquery=[Zeichenfolge]
,
Beschreibung
Zeigt eine Liste der verfügbaren Argumente an.
Diese Angabe setzt bei Programmstart den Index-Wert des ersten HTTPRequests, welches an den Suchdienst
gesendet wird. Der Defaultwert ist 1.
Der WebcrawlerJS inkrementiert die Indezes für alle weiteren HTTP-Requests
automatisch. Wird der Index bei Programmstart nicht angegeben, lädt der
WebcrawlerJS den letzten Wert der für
einen Index, der im letzten Programmdurchlauf verwendet wurde.
Begrenzt die Anzahl der Javascript
Dateien die erfolgreich heruntergeladen
und formatiert wurden und für eine
Umwandlung in XML zur Verfügung stehen.
Diese Angabe ist nicht notwendig, da der
Suchdienst Yahoo momentan als Default
eingestellt ist.
Diese Angabe ersetzt den Suchdienst Yahoo (default) durch Google CodeSearch
Ohne diese Angabe wird in Abhängigkeit
vom verwendeten Suchdienst ein Anfrage
verwendet, die möglichst viele Javascript
Dateien als Resultat liefern soll. Bei Yahoo ist das ’inurl:.js’, bei Google CodeSearch ’lang:javascript’. Das Argument -query ersetzt den Defaultwert.
Ergänzt die Anfrage durch weitere Suchbegriffe. Diese Angabe ist praktisch um
bei einem beschränkten Suchindexintervall durch geschickt gewählte Suchbegriffe
immer wieder neue Resultate zu erhalten.
Diese Angabe erzielt zusammen mit dem
Argument --yahoo sehr gute Ergebnisse.
Das Programm BashScriptGenerator.jar
aus dem Webcrawler-Starterkit generiert
ein Bashscript welches den WebcrwalerJS
mit unterschiedlichen Suchbegriffen aus
einer Wortliste aufruft.
8
Argument
--delemiter=[Zeichen]
--steps=[Zahl ≥1]
--delay=[Zahl ≥0]
,
Beschreibung
Die Suchdienste Yahoo und Google CodeSearch verwenden unterschiedliche Zeichen, um einzelne Suchbegriffe von
einander zu trennen. Mit diesem Argument kann ein beliebiges Zeichen als
Trennzeichen angegeben werden. Der Defaultwert is +.
Der WebcrawlerJS sendet bei Ausführung
HTTP-Requests an den Suchdienst und
inkrementiert dabei automatisch den Index. Mit diesem Argument kann die Anzahl an Resultaten angegeben werden,
die bei jedem HTTP-Request angefordert
werden sollen. Der Defaultwert ist 10. Ein
sehr gutes Ergebnis erhält man mit dem
Wert 40 und dem Argument --yahoo.
Gibt die Wartezeit an, die der WebcrawlerJS warten soll, bis er neue
HTTP-Requests an den Suchdienst
schickt.
9
Argument
--convert
--search
--notquiet
--nodbxml
--nocheck
--maxindex=[zahl ≥1]
--alias[Zeichenfolge]
--email=[Emailadresse]
--passwd=[Zeichenfolge]
Beschreibung
Convertiert
die
abgespeicherten
Javascript Dateien in XML ohne nach
neuen Javascript Dateien zu suchen.
Sucht nach neuen Javascript Dateien.
Wird dieses Argument nicht verwendet,
startet der Webcrwaler die Konvertierung
der Javascript Dateien in XML direkt
nach Beenden des Suchdurchlaufs.
Zeigt zusätzliche Informationen während
des Programmdurchlaufs an.
Dieses Argument sollte verwendet werden, wenn es nicht möglich ist die
native shared libraries der Berkeley
DBXML einzubinden. Die XML Dokumente können nachträglich der XML
Datenbank hinzugefügt werden, indem
der WebcrawlerJS mit dem Argument -convert ausgeführt wird, vorausgesetzt,
die nativ shared libraries stehen dann zur
Verfügung.
Der Webcrawler sendet beim Programmstart zwei HTTP-Requests an den Suchdienst, einmal, um die Verfügbarkeit zu
prüfen, und ein zweites mal um die
Verfügbarkeit unter Verwendung des aktuellen Wertes für den Startindex zu
prüfen. Um Zeit zu sparen, können diese
Tests mit --nocheck deaktiviert werden.
Dieser Parameter ist nützlich, wenn
Google CodeSearch als Suchdienst
verwendet wird. Google CodeSearch
beschränkt die Anzahl der Resultate
ebenfalls auf ein Indexintervall von 1 bis
1000, unterbricht aber meistens vorher
die Verbindung. Wird der WebcrawlerJS
mehrmals mit den gleichen Parametern
(ohne die Angabe von --index ) z.B. in
einem Skript gestartet, wird der Index
nach erreichen des Wertes zurückgesetzt
und nicht weiter erhöht.
Wird Google CodeSearch verwendet,
kann mit diesem Argument ein Token, z.B. der alternative Benutzername
aus einem Googleaccount, angegeben
werden.[Gooa]
Wird Google CodeSearch verwendet,
10 kann hier der Benutzername
(Emailadresse) eines Googleaccounts
angegeben werden.[Goob],[Gooa]
Wird Google CodeSearch verwendet,
kann hier dass zum Benutzernamen
gehörende Passwort angegeben werden.
,
Argument
--debug
--xmltoken
--noformat
,
Beschreibung
Zur Umwandlung der Javascript Dateien
in XML verwendet der WebcrawlerJS den
Rhino Parser von Mozilla. Dieser stellt
eine Debugansicht des erzeugten AST, die
Grundlage des resultierenden XML Dokumentes, zur Verfügung die mit --debug für
jede umgewandelte Javascript Datei auf
der Konsole ausgegeben wird.
Der WebcrawlerJS entfernt XML
Dateien, die lediglich einen Token vom
Typ XML verwenden, da dies darauf
hinweist, das der Rhino Parser mit einem
HTML Dokument aufgerufen wurde.
--xmltoken deaktiviert dieses Verhalten.
Der Rhino Parser, aber auch die Klasse
StringBuilder aus der java.lang reagieren
empfindlich auf Textdateien, welche eine
sehr große Anzahl Zeichen in nur einer
Zeile besitzen. Der WebcrawlerJS fügt deshalb Zeilenumbrüche ein, mit Rücksicht
auf die Javascript Syntax. Mit --noformat
wird ein Zeilenumbruch nach 50 Zeichen beim nächsten Semikolon erzwungen, wenn bis dahin kein Zeilenumbruch
erfolgte.
11
Argument
--duplicates=[zahl ≥0]
--notload
--tnames=[Pfadangabe]
--tvalues=[Pfadangabe]
-- tfiles
Beschreibung
Die Anzahl an Duplikaten, bei der der
WebcrawlerJS die Suche abbrechen soll.
Der Defaultwert von 5 erzielt sehr gute
Ergebnisse.
Deaktiviert das Laden von Javascript
Dateien, die in vorhergehenden Programmausführungen erfolgreich heruntergeladen wurden.
Mit diesem Argument kann der Pfad zu
einer Textdatei angegeben werden, mit
der sich die Namen der Token einstellen
lassen, die für die resultierenden XML
Dokumente verwendet werden sollen. Der
Defaultwert verweist auf die Dateien im
Ordner WebcrawlerJS/token der beim ersten Programmstart erzeugt wird.
Gibt den Pfad zu einer Textdatei an, die
bestimmt welche XML-Knoten einen Textknoten beinhalten dürfen.
Nach Aufruf des WebcrawlerJS mit
diesem Argument wird nur die Ordnerstruktur und die Einstellungsdateien
für die XML Struktur erstellt und anschließend das Programm beendet.
12
Literaturverzeichnis
[20009] Webcrawlerjs webinterface.
September 2009.
http://webcrawlerjs.malteahl.de/,
[DBX] Dbxml.
http://www.oracle.com/technology/products/
berkeley-db/xml/index.html.
[Gooa] Google account. https://www.google.com/accounts/ManageAccount.
[Goob] Google authentication. http://code.google.com/intl/de-DE/apis/
accounts/docs/AuthForInstalledApps.html.
[Gooc] Google codesearch. http://www.google.com/codesearch?hl=de.
[Rhia] Rhino. http://www.mozilla.org/rhino/.
[Rhib] Rhino javadoc.
http://mxr.mozilla.org/mozilla/source/js/
rhino/src/org/mozilla/javascript/.
[Yah]
Yahoo. http://de.yahoo.com/.
13