Lösung Teil 1: Liste runterladen und aufräumen
Zuerst holen wir uns eine Liste aller amerikanischen "Physicians" (in denen die Physiologen enthalten sind) von Wikipedia. Das geht am einfachsten mit der Konsole (Ubuntu 08.10). Nach einigen Versuchen sieht der Befehl dazu am Ende so aus:
wget -qO- http://en.wikipedia.org/wiki/List_of_physicians | grep "<li>" | awk -F'title=' '{print $2}' | awk -F'"' '{print $2}' > physician_list.txt
Was der Befehl bedeutet:
Zuallererst wird mit
wget -qO- http://en.wikipedia.org/wiki/List_of_physicians
die Liste von Wikipedia heruntergeladen. Die Option -q lässt wget ohne
störende Statusmeldungen laufen, die Option -O- (großes "o" und dann
ein Minus) lässt wget den Output auf die Konsole umleiten, anstatt ihn
in einer Datei zu speichern
Die Schreibweise -qO- ist Kurzform von -q -O- , was erlaubt ist, weil
hier alle Optionen nur aus aus einem Buchstaben bestehen.
Jetzt wird das komplette HTML-Dokument über die berühmten Physiologen in die Konsole ausgegeben. Wenn man sich das Dokument näher anschaut, kann man erkennen, dass die Namen immer in einer Zeile mit <li>-Tags stehen, und zwar immer nach einem "title=". Das benutzen wir, um möglichst nur die Namen heraus zu fischen:
Den Pipe-Operator | benutzt man dazu, um den Output des vorgerigen Befehls an den nächsten Befehlt weiter zu geben. Das funktioiniert aber nur für den Output, der auf der Konsole ausgegeben wird. Daher muss man bei wget die Optionen -qO- angeben!
grep "<li>"
durchsucht die mit dem |-Operator übergebene Liste nach der Zeichenkette <li> und gibt nur die Zeilen weiter, die diese Zeichenkette enthalten.
Jetzt kommt ein kleines Programm:
awk -F'title=' '{print $2}'
awk ist eine eigene Skriptsprache, die zum durchstöbern von Tabellen
benutzt werden kann. Man kann awk über die Konsole benutzen, indem man
awk -Optionen '{programm}' benutzt. Das Programm muss in geschweiften
Klammern stehen, um als solches erkannt zu werden, und in Hochkommatas,
damit die Konsole nicht versucht, innerhalb des Programmes $2 etc.
aufzulösen.
Die Optione -F'title=' sagt, dass in der mit dem |-Operator
übergebenen "Tabelle" die Zeichenkette "title=" als Trennelement
zwischen Spalten angesehen werden soll. Das "Programm" print $2 führt
dazu, dass die zweite Spalte auf der Konsole ausgegeben wird.
Alle Physicians, die schon einen eigenen Wikipedia-Eintrag haben (hoffen wir mal, dass unserer darunter fällt), stehen in Zeilen, die mit " beginnen. Hinter dem Namen steht wieder ein ". Perfekt für einen weiteren awk-Befehl!
awk -F'"' '{print $2}'
Jetzt bleiben noch 352 Zeilen übrig, die mit
> physician_list.txt
in einer Datei gespeichert werden. Da steht zwar noch Unsinn drin, aber den fischen wir nachher raus.