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:

# -*- 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.

<?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");
?>

Comments closed

Sorry, new comments are no longer allowed for this entry.

Write me an email if you have feedback or any questions regarding this post. If you found this post useful and just want to say thank you then don't forget that I have an Amazon Wishlist. :-)


↑ to the elevators

© 2001—2010 Martin Mahner. This is an I ♥ Django Project.

Admin | Generated: Fri, 23 Jul 2010 12:06:10 +0200