freakydog: Wikipedia-Content abfragen

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):

  1. 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?

  2. 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. Smiley:  :-)

    Darf Dein PHP Code-Beispiel frei verwendet werden?

    Grüße,

    Lu.

  3. 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

Kommentar hinzufügen

Neue Kommentare sind nur noch über diese Seite möglich.