<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7364696096910656229</id><updated>2012-01-19T08:46:07.871+01:00</updated><category term='Web-Dev'/><category term='Websniffer'/><category term='Web-Admin'/><category term='Turbo Gears'/><category term='Reguläre Ausdrücke'/><category term='Allgemein'/><category term='Nachgebaut'/><category term='Django'/><category term='Projekte'/><category term='CMS'/><title type='text'>Python Developer</title><subtitle type='html'>Softwareentwicklung in der Programmiersprache Python</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-662401015452791250</id><published>2008-11-19T05:59:00.004+01:00</published><updated>2008-11-19T06:09:50.360+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reguläre Ausdrücke'/><category scheme='http://www.blogger.com/atom/ns#' term='Web-Dev'/><title type='text'>URL mit regulären Ausdrücken überprüfen</title><content type='html'>Das kann man immer wieder gut gebrauchen: Die Überprüfung ob eine Zeichenkette eine korrekte URL ist.&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;def is_valid_url(url):&lt;br /&gt;"""Check des String url"""&lt;br /&gt;validUrl = """&lt;br /&gt;^(http|https)://[a-z0-9]+([-.]{1}[a-z0-9]+)*.[a-z]{2,5}(([0-9]{1,5})?/?.*)$"""&lt;br /&gt;&lt;br /&gt;if re.match(validUrl, url):&lt;br /&gt;return True&lt;br /&gt;else:&lt;br /&gt;return False&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Um eine völlige Sicherheit zu erreichen, müsste man die TLD in einem zweiten Schritt gegen eine Datenbank mit gültigen TLD laufen lassen.&lt;br /&gt;&lt;br /&gt;(Gibt es für die Problemstellung nicht auch eine "eingebaute" Lösung?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-662401015452791250?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/662401015452791250/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=662401015452791250' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/662401015452791250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/662401015452791250'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/11/url-mit-regulren-ausdrcken-berprfen.html' title='URL mit regulären Ausdrücken überprüfen'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-4763625173010479098</id><published>2008-06-15T16:14:00.000+02:00</published><updated>2008-06-16T12:16:16.471+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Websniffer'/><title type='text'>Python Websniffer</title><content type='html'>Der Grundstein für den Python Websniffer ist gelegt. Python bringt viele Module schon mit, sodass man igentlich nur die passenden finden muss und schon geht es mit ein paar Zeilen Code ab. Die Funktionalitäten sollen im Beta-Release den Umfang von &lt;a href="http://web-sniffer.net/" rel="extern nofollow"&gt;http://web-sniffer.net/&lt;/a&gt; haben. Darüber hinaus möchte ich noch ein paar zusätzliche Features einbauen, v.a. wenn es um Redirects geht. Wenn man beispielsweise im nachfolgenden Code den Wert der Variablen domain von "www.rentaseo.de" auf "rentaseo.de" setzt, erhält man ganz korrekt einen Status 301 (Moved Permanently). Exceptions gehören auch noch aufgefangen etc ...&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;import httplib&lt;br /&gt;import string&lt;br /&gt;import os&lt;br /&gt;&lt;br /&gt;opera = {"User-Agent":"Opera/9.20 (Windows NT 6.0; U; en)", "Accept-Charset":"ISO-8859-1,UTF-8;q=0.7,*;q=0.7", "Cache-Control":"no", "Accept-Language":"de,en;q=0.7,en-us;q=0.3", "Referer":"http://python-dev.blogspot.com"}&lt;br /&gt;&lt;br /&gt;domain = 'www.rentaseo.de'&lt;br /&gt;path = '/'&lt;br /&gt;method = 'GET'&lt;br /&gt;params = None&lt;br /&gt;profile = opera&lt;br /&gt;&lt;br /&gt;conn = httplib.HTTPConnection(domain)&lt;br /&gt;conn.request(method, path, params, profile)&lt;br /&gt;stat = conn.getresponse()&lt;br /&gt;headers = stat.getheaders()&lt;br /&gt;version = stat.version&lt;br /&gt;status = stat.status&lt;br /&gt;reason = stat.reason&lt;br /&gt;data = stat.read()&lt;br /&gt;conn.close()&lt;br /&gt;&lt;br /&gt;file_name = domain.replace(".", "-")&lt;br /&gt;file_object = open(file_name, "w")&lt;br /&gt;file_object.write(data)&lt;br /&gt;file_object.close()&lt;br /&gt;&lt;br /&gt;print "\n"&lt;br /&gt;print "WEBSNIFFER 0.1"&lt;br /&gt;print "+++++++++++++++++"&lt;br /&gt;print "\n"&lt;br /&gt;print "Header (Client)"&lt;br /&gt;print "-----------------"&lt;br /&gt;for key, value in profile.iteritems():&lt;br /&gt;print "%s \t %s" % (key, value)&lt;br /&gt;print "-----------------"&lt;br /&gt;print "\n"&lt;br /&gt;print "Header (Server)"&lt;br /&gt;print "-----------------"&lt;br /&gt;print "HTTP \t %s" % (version)&lt;br /&gt;print "Status \t %s (%s)" % (status, reason)&lt;br /&gt;for key, value in headers:&lt;br /&gt;print "%s \t %s" % (key, value)&lt;br /&gt;print "-----------------"&lt;br /&gt;print "\n"&lt;br /&gt;print "Quelltext"&lt;br /&gt;print "-----------------"&lt;br /&gt;print "Quelltext geschrieben in File:"&lt;br /&gt;print file_name&lt;br /&gt;print "-----------------"&lt;br /&gt;print "\n"&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Was macht nun dieses kleine Script bereits? Eigentlich alles was der Websniffer auch kann, lediglich die Profile müssen noch implementiert werden. Die Formatierung des HTML wäre auch noch wünschenswert.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;pre&gt;&lt;br /&gt;WEBSNIFFER 0.1&lt;br /&gt;+++++++++++++++++&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Header (Client)&lt;br /&gt;-----------------&lt;br /&gt;Accept-Charset    ISO-8859-1,UTF-8;q=0.7,*;q=0.7&lt;br /&gt;Cache-Control    no&lt;br /&gt;Accept-Language   de,en;q=0.7,en-us;q=0.3&lt;br /&gt;Referer    http://python-dev.blogspot.com&lt;br /&gt;User-Agent    Opera/9.20 (Windows NT 6.0; U; en)&lt;br /&gt;-----------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Header (Server)&lt;br /&gt;-----------------&lt;br /&gt;HTTP            11&lt;br /&gt;Status            200 (OK)&lt;br /&gt;x-powered-by    PHP/4.4.0&lt;br /&gt;transfer-encoding chunked&lt;br /&gt;set-cookie    PHPSESSID=4b33b42bdee7cb22983ee4ffcf02be04; path=/&lt;br /&gt;expires    Thu, 19 Nov 1981 08:52:00 GMT&lt;br /&gt;server            Apache/2.0.54 (Linux/SUSE)&lt;br /&gt;pragma            no-cache&lt;br /&gt;cache-control    no-store, no-cache, must-revalidate, post-check=0, pre-check=0&lt;br /&gt;date            Mon, 16 Jun 2008 10:25:04 GMT&lt;br /&gt;content-type    text/html; charset=UTF-8&lt;br /&gt;x-pingback    http://www.rentaseo.de/xmlrpc.php&lt;br /&gt;-----------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Quelltext&lt;br /&gt;-----------------&lt;br /&gt;Quelltext geschrieben in File:&lt;br /&gt;www-rentaseo-de&lt;br /&gt;-----------------&lt;br /&gt;&lt;/pre&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Das Beispiel zeigt die Ausgabe bei der Abfrage nach www.rentaseo.de.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-4763625173010479098?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/4763625173010479098/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=4763625173010479098' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/4763625173010479098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/4763625173010479098'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/python-websniffer.html' title='Python Websniffer'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-8369893536672644317</id><published>2008-06-11T10:36:00.000+02:00</published><updated>2008-06-12T07:08:40.132+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web-Dev'/><title type='text'>Mediawiki/Wikipedia Parser</title><content type='html'>Ich habe gerade keine Zeit, mit das Modul genauer anzusehen - für den ein oder anderen mag es aber brennend interessant sein: Auf Pediapress findet sich Python Code, mit dem Wikipedia (und alle Media Wikis) geparst, die Inhalte geholt, verarbeitet, als PDF ausgegeben ... werden können. Es stehen sogar Tools bereit, um Wikipedia Bücher zu produzieren.&lt;br /&gt;&lt;br /&gt;Der &lt;a href="http://code.pediapress.com/wiki/wiki" rel="extern nofollow" target="_blank"&gt;Link dazu&lt;/a&gt; und viel Spass beim experimentieren.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-8369893536672644317?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/8369893536672644317/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=8369893536672644317' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/8369893536672644317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/8369893536672644317'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/mediawikiwikipedia-parser.html' title='Mediawiki/Wikipedia Parser'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-8423667930070153046</id><published>2008-06-10T12:30:00.000+02:00</published><updated>2008-06-12T07:06:55.546+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web-Admin'/><title type='text'>Page Rank (PR) Abfrage mit Python</title><content type='html'>Page Rank Abfragen sind für SEOs und viele Webmaster die Lieblingsbeschäftigung. Thomas Lotze hat die berühmt berüchtigte WWW::Google::PageRank Library auf Python übertragen.&lt;br /&gt;&lt;br /&gt;Download &lt;a rel="extern nofollow" target="_blank"  href="http://svn.thomas-lotze.de/public/googlepagerank/trunk.tar.gz?view=tar"&gt;http://svn.thomas-lotze.de/public/googlepagerank/trunk.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Leider ist das Python Modul nicht dokumentiert. Das Tool ist auch für die Kommando-Zeile gedacht. Allerdings bringt uns ein Blick auf das Starter-Script weiter ...&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;#&lt;br /&gt;# Copyright (c) 2007 Thomas Lotze&lt;br /&gt;# See also LICENSE.txt&lt;br /&gt;&lt;br /&gt;"""Fetches page ranks for the given URLs from Google and prints them out.&lt;br /&gt;&lt;br /&gt;Google page ranks range from 1 (unimportant) to 10 (important).&lt;br /&gt;An empty page rank means Google has not yet assigned a rank to the URL.&lt;br /&gt;"IO" instead of a page rank means there was an error contacting Google.&lt;br /&gt;"RE" means Google's response could not be understood.&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;import sys&lt;br /&gt;import urllib&lt;br /&gt;import tl.googlepagerank.interface as gpri&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for target in sys.argv[1:]:&lt;br /&gt;   try:&lt;br /&gt;       rank = gpri.read_rank(urllib.urlopen(gpri.query_url(target)).read())&lt;br /&gt;   except IOError:&lt;br /&gt;       rank = "IO"&lt;br /&gt;   except ValueError:&lt;br /&gt;       rank = "RE"&lt;br /&gt;   else:&lt;br /&gt;       if not int(rank):&lt;br /&gt;           rank = ""&lt;br /&gt;&lt;br /&gt;   print "%2s %s" % (rank, target)&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Daraus lässt sich wunderbar eine Klasse entwickeln, die anstatt einfach das Ergebnis auszugeben, eine Funktion enthält, die das Ergebnis in Dictionary ablegt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-8423667930070153046?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/8423667930070153046/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=8423667930070153046' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/8423667930070153046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/8423667930070153046'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/page-rank-pr-abfrage-mit-python.html' title='Page Rank (PR) Abfrage mit Python'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-1094522696136255842</id><published>2008-06-09T08:26:00.000+02:00</published><updated>2008-06-12T06:59:44.099+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web-Admin'/><title type='text'>IP auf Land mappen ... selbstgemacht</title><content type='html'>Wer nicht die &lt;a href="http://python-dev.blogspot.com/2008/06/ip-host-einem-land-oder-stadt-zuweisen.html"&gt;MaxMind Datenbank&lt;/a&gt; nutzen möchte und wem die Zuordnung einer IP zum Land genügt, der kann sich natürlich selbst eine entsprechende Datenbank aus den Zonen-DNS bauen. Es gibt dazu ein Python Script, das allerdings Fehler bei sechs TLD (GG, RS, JE, ME, IM, AX) ausgibt. Da ich erst einmal nachsehen musste, wo die &lt;a rel="extern nofollow" target="_blank"  href="http://maps.google.de/maps?f=q&amp;hl=de&amp;geocode=&amp;q=aland&amp;sll=51.151786,10.415039&amp;sspn=11.612003,35.375977&amp;ie=UTF8&amp;ll=60.251738,20.212097&amp;spn=0.286876,1.105499&amp;z=10&amp;lci=lmc:panoramio,lmc:wikipedia_de"&gt;Aland Insel (AX)&lt;/a&gt; liegt ... Aber ich werde noch einen Blick auf das Script werfen. Dramatisch kann der Fehler nicht sein, denn alle anderen Zuordnungen scheinen fehlerfrei zu funktionieren.&lt;br /&gt;&lt;br /&gt;Download &lt;a href="http://downloads.sourceforge.net/ppa/ip2cc-0.4.tar.gz?modtime=1111602426&amp;amp;big_mirror=0" onclick="window.location='/project/downloading.php?group_id=47230&amp;use_mirror=heanet&amp;filename=ip2cc-0.4.tar.gz&amp;'+Math.floor(Math.random()*100000000); return false;" rel="extern nofollow" target="_blank"&gt;ip2cc-0.4.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wer sich auf Fehlersuche begeben möchte: Die DB bei &lt;a href="http://search.cpan.org/%7Enwetters/IP-Country-2.24/lib/IP/Country.pm" rel="extern nofollow" target="_blank"&gt;CPan&lt;/a&gt; könnte hilfreich sein.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-1094522696136255842?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/1094522696136255842/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=1094522696136255842' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/1094522696136255842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/1094522696136255842'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/ip-auf-land-mappen-selbstgemacht.html' title='IP auf Land mappen ... selbstgemacht'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-528434520592781742</id><published>2008-06-07T18:10:00.000+02:00</published><updated>2008-06-12T06:55:50.959+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Django'/><category scheme='http://www.blogger.com/atom/ns#' term='Turbo Gears'/><category scheme='http://www.blogger.com/atom/ns#' term='CMS'/><title type='text'>Blog-Systeme in Python</title><content type='html'>Die gängisten Blogsysteme für eigene Intsallationen sind Wordpress, Serendipity, Textpattern und Movable Type. Bis auf letzteres, das hauptsächlich in Perl entwickelt wurde, nutzen alle die Skriptsprache PHP. Das ist mit Sicherheit der Verbreitung geschuldet.&lt;br /&gt;&lt;br /&gt;Natürlich gibt es auch auf Python basierende Blog-Software. Was hier sofort auffällt: Beinahe alle Lösungen sind Teil eines größeren Frameworks. Damit zielen diese auch nicht primär für den einzelnen Blogger ab, sondern mehr auf individuelle Konfigurationen.&lt;br /&gt;&lt;br /&gt;Hier eine kurze und sicherlich unvollständliche Liste mit Blog-Software:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/blogmaker/"&gt;Blogmaker&lt;/a&gt; baut auf das Framework Django&lt;/li&gt;&lt;li&gt;&lt;a href="http://chrisarndt.de/projects/cblog/"&gt;CBlog&lt;/a&gt; von Christopher Arndt (TurboGears Framework)&lt;/li&gt;&lt;li&gt;&lt;a href="http://turboblog.devjavu.com/"&gt;Turboblog&lt;/a&gt; benötigt ebenfalls TurboGears&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/p/gibe/"&gt;gibe&lt;/a&gt; ein Blog-System mit Plugins&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://plone.org/products/quills"&gt;Quills &lt;/a&gt;ist eine Blog-Software für das hochgelobte Plone CMS&lt;/li&gt;&lt;li&gt;&lt;a href="http://pyblosxom.sourceforge.net/static/about.html"&gt;PyBloxsom&lt;/a&gt; läuft auch als CGI&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-528434520592781742?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/528434520592781742/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=528434520592781742' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/528434520592781742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/528434520592781742'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/blog-systeme-in-python.html' title='Blog-Systeme in Python'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-8263479909835504850</id><published>2008-06-05T06:43:00.000+02:00</published><updated>2008-06-12T06:56:45.122+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web-Admin'/><title type='text'>Apache Log-File-Filter Loghetti</title><content type='html'>Es kann wirklich ein interessantes Projekt werden, der Log-File-Filter Loghetti. Momentan ist es ein Kommandozeilen-Tool, soll sich aber zu einem Framework entwickeln.&lt;br /&gt;&lt;br /&gt;Was kann es? Was tut es? Wo gibt es ...?&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a rel="extern nofollow" target="_blank" href="http://code.google.com/p/loghetti/"&gt;Loghetti Home auf Google Code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a target="_blank" href="http://www.protocolostomy.com/category/loghetti/"&gt;Loghetti Infos vom Entwickler Blog&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;.&lt;a rel="extern nofollow" target="_blank" href="http://www.oreillynet.com/onlamp/blog/2008/03/loghetti_an_apache_log_file_fi.html"&gt;.. und auf O´Reilly.net&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-8263479909835504850?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/8263479909835504850/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=8263479909835504850' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/8263479909835504850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/8263479909835504850'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/apache-log-file-filter-loghetti.html' title='Apache Log-File-Filter Loghetti'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-8814488620962871692</id><published>2008-06-03T13:41:00.000+02:00</published><updated>2008-06-12T06:57:32.483+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web-Admin'/><title type='text'>Robots.txt Parser</title><content type='html'>Parser für Robots.txt-Dateien werden immer wieder gebraucht, sei es zum Bau eines eigenen Webcrawlers oder zur Überprüfung, ob eine Unterseite von Webcrawlern erreicht werden kann. Python bringt dafür eine eigene Klasse mit. Im Grunde ist diese sehr gut in der Dokumentation beschrieben und ich gebe hier nur das Beispiel wieder, damit ich diese nicht selber vergesse.&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;&gt;&gt;&gt; import robotparser&lt;br /&gt;&gt;&gt;&gt; rp = robotparser.RobotFileParser()&lt;br /&gt;&gt;&gt;&gt; rp.set_url("http://forum.spiegel.de/robots.txt")&lt;br /&gt;&gt;&gt;&gt; rp.read()&lt;br /&gt;&gt;&gt;&gt; rp.can_fetch('*', "http://forum.spiegel.de/forumdisplay.php?f=5")&lt;br /&gt;False&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Das Script gibt im konkreter Beispiel "False" zurück, denn das Forum ist gänzlich für Suchmaschinen gesperrt.&lt;br /&gt;&lt;br /&gt;Der Code ist eigentlich selbsterklärend. Die Funktion rp.set_url nimmt als Parameter die URL zur Robots.txt auf.&lt;br /&gt;&lt;br /&gt;Zwei Paramenter nimmt can_fetch auf: Der erste bezieht sich auf den Crawler, der zweite auf die abzufragende URL. Das Sternchen * ist der Platzhalter für alle Crawler. Der Rückgabewert ist "True", falls der angegebene Crawler die betreffende Seite lesen darf, "False" wenn nicht.&lt;br /&gt;&lt;br /&gt;Hier noch ein Beispiel, das vielleicht besser passt. &lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;&gt;&gt;&gt; import robotparser&lt;br /&gt;&gt;&gt;&gt; rp = robotparser.RobotFileParser()&lt;br /&gt;&gt;&gt;&gt; rp.set_url("http://www.spiegel.de/robots.txt")&lt;br /&gt;&gt;&gt;&gt; rp.read()&lt;br /&gt;&gt;&gt;&gt; rp.can_fetch("Slurp", "http://www.spiegel.de/flash/0,5532,17440,00.html")&lt;br /&gt;True&lt;br /&gt;&gt;&gt;&gt; rp.can_fetch("WebReaper","http://www.spiegel.de/flash/0,5532,17440,00.html")&lt;br /&gt;False&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Slurp (Yahoo!) darf natürlich die Hauptdomain (mit Ausnahmen) durchsuchen, der Webreaper ist ausgesperrt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-8814488620962871692?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/8814488620962871692/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=8814488620962871692' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/8814488620962871692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/8814488620962871692'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/robotstxt-parser.html' title='Robots.txt Parser'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-4130084683703146920</id><published>2008-06-02T11:57:00.000+02:00</published><updated>2008-06-12T07:06:19.042+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web-Dev'/><category scheme='http://www.blogger.com/atom/ns#' term='Web-Admin'/><title type='text'>IP / Host einem Land oder Stadt zuweisen</title><content type='html'>Beim Stöbern nach neuen Python-Modulen zum Geo-Targeting auf eine interessante Lösung gestoßen, die ich in einer ruhigen Minute (oh, ja ;) ) ausprobieren möchte. Für einen SEO kann es höchst interessant sein, in welchem Land sich ein Server befindet. (Nicht nur Google betreibt Geo-Targeting bis zum Exzess.)&lt;br /&gt;&lt;br /&gt;Die Firma MaxMind stellt verschiedene Datenbanken in unterschiedlichen Lizenz-Modellen zur Verfügung, eine unter der Open Source Lizenz GPL. Das Interface unterstützt natürlich &lt;a href="http://www.maxmind.com/app/python" rel="extern nofollow" target="_blank"&gt;Python&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Live Ausprobieren:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;    &lt;li&gt;&lt;a href="http://www.maxmind.com/app/lookup" rel="extern nofollow" target="_blank"&gt;IP / Hostname einem Land zuordnen&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;    &lt;li&gt;&lt;a href="http://www.maxmind.com/app/lookup_city" rel="extern nofollow" target="_blank"&gt;Es geht auch noch detailierter&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;In der kostenpflichtigen Version können sogar Netzwerke größerer Organistionen aufgelöst werden. Mir reicht jedoch wahrscheinlich die Aktualität und Umfang der &lt;a href="http://www.maxmind.com/app/geolitecountry" rel="extern nofollow" target="_blank"&gt;Open Source Variante&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-4130084683703146920?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/4130084683703146920/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=4130084683703146920' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/4130084683703146920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/4130084683703146920'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/ip-host-einem-land-oder-stadt-zuweisen.html' title='IP / Host einem Land oder Stadt zuweisen'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-2326457481123307027</id><published>2008-06-02T10:22:00.000+02:00</published><updated>2008-06-12T07:04:59.670+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Projekte'/><title type='text'>Rent a SEO Ranking Check</title><content type='html'>Zur Zeit portiere ich meine SEO Tools von Tcl nach Python stelle diese der Community unter einer Open Source Lizenz zur Verfügung. Den Anfang macht mein Ranking Check Tool, das entweder die Positionen verschiedener Domains unter einem Suchbegriff oder die Positionen einer Domain unter verschiedenen Suchbegriffen anzeigt bei Google zeigt.&lt;br /&gt;&lt;br /&gt;Gehostet wird das Projekt beim OS Inkubator Berlios. Die Projektwebsite dürfte in wenigen Stunden unter &lt;a href="http://rentaseo-rc.berlios.de/"&gt;http://rentaseo-rc.berlios.de/&lt;/a&gt; freigegeben werden. Bitte gebt mir einen Tag, bis ich mich bei Berlios zurechtfinde und die Umgebung eingerichtet habe, damit ich den Code hochladen kann.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-2326457481123307027?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/2326457481123307027/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=2326457481123307027' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/2326457481123307027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/2326457481123307027'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/rent-seo-ranking-check.html' title='Rent a SEO Ranking Check'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-3648555594091546932</id><published>2008-06-02T00:46:00.000+02:00</published><updated>2008-06-12T07:03:39.501+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web-Admin'/><title type='text'>Domain / IP Abfragen</title><content type='html'>Eleganter in einen Online Service zu integrieren als die &lt;a href="http://python-dev.blogspot.com/2008/06/python-und-nslookup-whois.html"&gt;Einbindung von nslookup&lt;/a&gt; bei der Abfrage der IP Adresse ist das Ergebnis unter Nutzung des Low Level Interface sockets. Aber auch das ist unter Python keine Hexerei und mit wenigen Zeilen Code zu erledigen:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;&gt;&gt;&gt; import socket&lt;br /&gt;&gt;&gt;&gt; data = socket.gethostbyname("rentaseo.de")&lt;br /&gt;&gt;&gt;&gt; print data&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Das Ergebnis lautet im konkreten Fall wie erwartet "85.214.39.237".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-3648555594091546932?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/3648555594091546932/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=3648555594091546932' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/3648555594091546932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/3648555594091546932'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/domain-ip-abfragen.html' title='Domain / IP Abfragen'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-1637133237465005317</id><published>2008-06-02T00:15:00.000+02:00</published><updated>2008-06-12T07:02:49.640+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nachgebaut'/><category scheme='http://www.blogger.com/atom/ns#' term='Web-Admin'/><title type='text'>Python und nslookup + whois</title><content type='html'>Wir kennen alle die recht gerne genutzten Dienste nslookup und whois. Unix / Linux Nutzer verwenden dies beiden Werkzeuge direkt in der Shell, weniger erfahrene Webmaster besuchen gerne entsprechende Online Angebote. Dabei ist nichts dabei, via Python einen solchen Service bereit zu stellen.&lt;br /&gt;&lt;br /&gt;Python bietet mehrere Lösungsansätze. Da ich davon ausgehe, dass ein solcher Service auf einem Unix / Linux Server laufen wird, kann man einfach die beiden Kommandozeilen Werkzeuge direkt ansprechen. Die Grundstruktur dafür ist wirklich simpel:&lt;br /&gt;&lt;br /&gt;Zuerst der Beispielcode für eine Whois-Abfrage ...&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;&gt;&gt;&gt; import os&lt;br /&gt;&gt;&gt;&gt; data = os.popen("whois rentaseo.de").read()&lt;br /&gt;&gt;&gt;&gt; print data&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;... das im konkreten Fall zu folgender Ausgabe (Auszug) führt:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Domain:      rentaseo.de&lt;br /&gt;Domain-Ace:  rentaseo.de&lt;br /&gt;Nserver:     server1-ns1.udagdns.net&lt;br /&gt;Nserver:     server1-ns2.udagdns.net&lt;br /&gt;Nserver:     server1-ns3.udagdns.net&lt;br /&gt;Status:      connect&lt;br /&gt;Changed:     2006-11-29T22:27:49+01:00&lt;br /&gt;&lt;br /&gt;[Holder]&lt;br /&gt;Type:         PERSON&lt;br /&gt;Name:         Matthias Suess&lt;br /&gt;Address:      Brunnleite 2&lt;br /&gt;Pcode:        92421&lt;br /&gt;City:         Schwandorf&lt;br /&gt;Country:      DE&lt;br /&gt;Changed:      2006-11-29T22:27:48+01:00&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Wenn man sich die Arbeit macht, die Augabe der einzelnen Whois Server zu analysieren kann man deren Response auch noch durch einen Parser schicken und die Ergebnisausgabe noch richtig schön gestalten.&lt;br /&gt;&lt;br /&gt;Eben so einfach gestaltet sich die Abfrage nach der IP Adresse einer Domain ...&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;&gt;&gt;&gt; import os&lt;br /&gt;&gt;&gt;&gt; data = os.popen("nslookup rentaseo.de").read()&lt;br /&gt;&gt;&gt;&gt; print data&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;... das folgendes Ergebnis liefert:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;Server:  193.254.160.1&lt;br /&gt;Address: 193.254.160.1#53&lt;br /&gt;&lt;br /&gt;Non-authoritative answer:&lt;br /&gt;Name: rentaseo.de&lt;br /&gt;Address: 85.214.39.237&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Die Domain rentaseo.de ist unter der IP 85.214.39.237 ansprechbar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-1637133237465005317?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/1637133237465005317/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=1637133237465005317' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/1637133237465005317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/1637133237465005317'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/python-und-nslookup-whois.html' title='Python und nslookup + whois'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-7221449495906149898</id><published>2008-06-01T23:47:00.000+02:00</published><updated>2008-06-12T07:01:57.774+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nachgebaut'/><category scheme='http://www.blogger.com/atom/ns#' term='Web-Dev'/><title type='text'>What´s that Site running ...</title><content type='html'>What´s that Site running? Die Antwort auf diese Frage hat Netcraft groß gemcht. Dabei reichen ein paar Zeilen in Phython aus und schon weiss man, welcher Server hinter einer Site werkelt:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;&gt;&gt;&gt; import urllib2&lt;br /&gt;&gt;&gt;&gt; info = urllib2.urlopen("http://www.rentaseo.de")&lt;br /&gt;&gt;&gt;&gt; print info.info()&lt;br /&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Diese konkrete Anfrage liefert folgende Infos:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;br /&gt;Date: Sun, 01 Jun 2008 22:18:58 GMT&lt;br /&gt;Server: Apache/2.0.54 (Linux/SUSE)&lt;br /&gt;X-Powered-By: PHP/4.4.0&lt;br /&gt;Set-Cookie: PHPSESSID=d05d22804f9f9a347b494a0cf1ad3594; path=/&lt;br /&gt;Expires: Thu, 19 Nov 1981 08:52:00 GMT&lt;br /&gt;Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0&lt;br /&gt;Pragma: no-cache&lt;br /&gt;X-Pingback: http://www.rentaseo.de/xmlrpc.php&lt;br /&gt;Content-Type: text/html; charset=UTF-8&lt;br /&gt;Connection: close&lt;br /&gt;&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-7221449495906149898?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/7221449495906149898/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=7221449495906149898' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/7221449495906149898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/7221449495906149898'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/whats-that-site-running.html' title='What´s that Site running ...'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7364696096910656229.post-9694317337916195</id><published>2008-06-01T09:01:00.000+02:00</published><updated>2008-06-12T07:00:20.982+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Allgemein'/><title type='text'>Python Download</title><content type='html'>Die Open Source Sprache Python wird von der sehr aktiven Entwickler-Community für beinahe jede erdenkliche Plattform zur Verfügung gestellt. Zudem existieren verschiedene (aber untereinander kompatible) Distributionen.&lt;br /&gt;&lt;br /&gt;Natürlich ist die offizielle Website &lt;a href="http://python.org/download/" rel="extern nofollow" target="_blank"&gt;python.org die erste Anlaufstelle&lt;/a&gt;, um die aktuellste Version herunter zu laden. Unter Umständen sind jedoch alternative Distributionen besser geeignet:&lt;br /&gt;&lt;br /&gt;Jede mir bekannte Linux-Distribution bringt bereits eine abgestimmte Version mit. Gleiches gilt für die *BSD-Systeme. Hier rate ich diese zu nutzen.&lt;br /&gt;&lt;br /&gt;Windows-User sind eventuell mit der ebenfalls kostenfreien &lt;a href="http://activestate.com/Products/activepython/" rel="extern nofollow" target="_blank"&gt;ActiveState Variante&lt;/a&gt; besser bedient. Ich selber arbeite unter OS X ebenfalls damit, obwohl für das Apple Betriebssystem sich auch die Darwin Ports anbieten würden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7364696096910656229-9694317337916195?l=python-dev.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python-dev.blogspot.com/feeds/9694317337916195/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7364696096910656229&amp;postID=9694317337916195' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/9694317337916195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7364696096910656229/posts/default/9694317337916195'/><link rel='alternate' type='text/html' href='http://python-dev.blogspot.com/2008/06/python-download.html' title='Python Download'/><author><name>Matthias Süß</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_l6Gul1fuOrA/SVXwWnTy-iI/AAAAAAAAABE/9yC6pSOKAUQ/S220/Matthias-Amberg.jpg'/></author><thr:total>0</thr:total></entry></feed>
