58. WikiTreffen

Zeit: Mittwoch, 02.06.04 ab 18:00 h
Ort: im Lehrstuhl Bürgerliches Recht, Rechtstheorie und Rechtinformatik (Uni Saarbrücken).

Sonderveranstaltung "Wiki von innen" Teil 2 und Einführung in Python: Makro-Programmierung

im Rahmen der Veranstaltung "EDV-Instrumente für die juristische Arbeit" (Prof. Herberger), siehe auch Teil 1: WikiTreffen/2004-05-19

Python

Makro

/usr/local/moin/MoinMoin/macro

Unsere Programmier-Versuche

>>> import urllib
>>> print urllib.urlopen("http://www.jurawiki.de").read()

>>> datei = open("jurawiki.html", "wa")
>>> datei.write(seite)

>>> url = "http://de.wikipedia.org/wiki/Prinz_Eugen_%28Schiff%29"
>>> seite = urllib.urlopen(url).read()
>>> import re
>>> regexp = re.compile(r"(?P<titel><h1.*</h1>)")
>>> result = regexp.search(seite)
>>> test =  result.group('titel')

Traceback (most recent call last):
  File "<pyshell#29>", line 1, in -toplevel-
    test =  result.group('titel')
AttributeError: 'NoneType' object has no attribute 'group'

Nachtrag

So sollte das funktionieren:

>>> ipmport urrlib, re
>>> url = "http://de.wikipedia.org/wiki/Prinz_Eugen_%28Schiff%29"

Zunächst einen "unverdächtigen" User-Agent setzen (auf "Python-urllib/1.15" z.B. reagiert Wikipedia mit einer Fehlerseite).

>>> urllib.URLopener.version ="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
>>> seite = urllib.urlopen(url).read()

>>> regexp = re.compile(r"<h1.*>(?P<titel>.*)</h1>")
>>> result = regexp.search(seite)
>>> print result.group("titel")
Prinz Eugen (Schiff)

Und jetzt den ersten Absatz:

>>> regexp = re.compile(r"<p>(?P<text>.*)</p>", re.DOTALL)

Das Flag DOTALL soll bewirken, dass auch Zeilenumbrüche aktzeptiert werden.

>>> result = regexp.search(seite)
>>> print result.group("text")

Offenbar wird so alles zwischen dem ersten <p> und dem letzten </p> geliefert, d.h. man bekommt den ganzen Artikel. Auch nicht schlecht ;)

OffeneFrage: Wie bekommt man nur den ersten Absatz?


siehe auch KooperationMitWikipedia/WikipediaMakro


Teil 1: WikiTreffen/2004-05-19


WikiTreffen/2004-06-02 (zuletzt geändert am 2008-01-20 19:59:06 durch anonym)