Wikipedia-Content abfragen
Wikipedia hat einen simplen aber effektiven Schutz, um sich vor Content-Diebstahl zu schützen: eine Abfrage ohne "User-Agent" erhält nur einen praktisch nichts-sagenden Fehler:
Failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden
Anders ausgedrückt: wer mit dem Browser auf Wikipedia surft hat kein Problem, wer aber einen Grabber nutzt um Wikipedia-Content abzufragen kriegt keine Ergebnisse.
Nun ist es aber gerade kein Content-Diebstahl wenn man Wikipedia-Texte auf seiner Homepage zitiert, egal ob in Auszügen oder als Ganzes – solange die Herkunft bzw. der Autor genannt wird. (Diesen Umstand wissen die meisten Wikipedia-Autoren aber selbst auch nicht.)
Um Wikipedia-Content trotzdem abzufragen nutze ich diese Python-Funktion:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # -*- coding: UTF-8 -*- import urllib2 def get_wiki_page(keyword): headers = { 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3', 'Accept-Encoding': 'deflate', 'Accept-Charset': 'utf-8', 'Referer': 'http://de.wikipedia.org/wiki/Hauptseite', } url = 'http://de.wikipedia.org/wiki/%s' % keyword try: request = urllib2.Request(url, None, headers) response = urllib2.urlopen(request) content = response.read() response.close() return content except urllib2.HTTPError: print "HTTPError: %s" % url print get_wiki_page("Urheberrecht") |
In PHP würde diese Funktion etwa so aussehen. Hier mit Hilfe der Curl-Funktionen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?php function get_wiki_page($keyword) { $url = 'http://de.wikipedia.org/wiki/'.$keyword; $ch = curl_init(); $options = array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => True, CURLOPT_HEADER => False, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3', CURLOPT_ENCODING => 'deflate', CURLOPT_REFERER => 'http://de.wikipedia.org/wiki/Hauptseite', ); curl_setopt_array($ch, $options); $response = curl_exec($ch); curl_close($ch); return $response; } echo get_wiki_page("Urheberrecht"); ?> |
Geschrieben am: 02. April 2007 um 13:02 Uhr, Abgelegt in Django & Python
Kommentare zu diesem Artikel (3):
-
Lu schrieb am 07. Oktober 2007:
Interessanter Artikel.
Aber im PHP Beispiel steckt ein kleiner Fehler.
Es muss lauten: $url = 'http://de.wikipedia.org/wiki/'.$keyword;
nicht
$url = ''http://de.wikipedia.org/wiki/''.$keyword;(zwei Anführungzeichen zuviel).
Ein anderes und weit gravierenderes Problem, bei mir zumindest, ist, dass in dem Dokument die Sonderzeichen falsch angezeigt werden (verwendetes Keyword = Computer). Ist dies bei Dir auch der Fall?
-
Lu schrieb am 07. Oktober 2007:
Korrektur:
die geschilderte Problematik mit den Umlauten konnte ich lösen. Hatte die um den Code umfliessende Webseite falsch programmiert.

Darf Dein PHP Code-Beispiel frei verwendet werden?
Grüße,
Lu.
-
Martin schrieb am 08. Oktober 2007:
Im Quellcode waren alle ' durch ein '' ersetzt. Warum? Keine Ahnung, das ist nun jedenfalls gefixt.
Wikipedia sendet den Quellcode in UTF-8 zurück, dementsprechend muss das Charset der Ausgabeseite auch UTF-8-codiert sein, oder man lässt nochmal utf8_decode darüber laufen.
Ja das Script kann frei verwendet werden (da steckt ja nix hinter).
Kommentar schreiben