#!/usr/bin/env python # coding: utf-8 # # Netzwerk und Internet # Miteinander kommunizierende Computer sind eine sehr mächtige Erfindung. # Prominente Beispiele sind lokale Netzwerke, das Internet, das hier vorliegende IPython Notebook, Smartphones und Raumsonden. # Im folgenden wird umrissen, wie man mittels Python mit einem Server kommunizeren kann, # wie Daten übertragen werden, und wie ein Server prinzipiell gestartet werden kann. # Python selbst liefert die Bibliotheken [urllib](https://docs.python.org/2/library/urllib.html) ([Py3 urllib](https://docs.python.org/3/library/urllib.html)) # und [urllib2](https://docs.python.org/2/library/urllib2.html) aus. # Sie liefern eine rudimentäre Schnittstelle um mit der Außenwelt kommunizieren zu können. # # Besser ist eine Bibliothek wie [requests](http://docs.python-requests.org/en/latest/), welche einfacher zu bedienen ist. # In[1]: import requests as req # ## WWW: HTTP GET requests # # Kommunikation im [WWW](http://info.cern.ch/hypertext/WWW/TheProject.html) läuft über das [HTTP Protokol](http://en.wikipedia.org/wiki/HTTP) ab. # Es gibt Verben und Objekte. Das Verb "GET" teilt einem anderen Computer (Server) mit, dass der eine Computer etwas haben möchte. # Die dieser Kommunikation [zugrunde liegenden Systeme](http://en.wikipedia.org/wiki/OSI_model) stellen sicher, dass beide miteinander auch über große Distanzen sprechen können. # # Im folgenden Beispiel holen wir uns die Zellen des dieses hier vorliegenden Notebooks vom [Hauptrepository of GitHub](https://github.com/haraldschilly/python-fuer-mathematiker/). # Das Dateiformat basiert auf [JSON](http://json.org) und es werden genau die hier sichtbaren Zellen geladen. # # Die `requests` Bibliothek verbindet sich dabei zu GitHub über das Internet, teilt dem Server mit, dass es genau diese Datei haben möchte, und dann verarbeitet es die Rohdaten zu einer JSON Datenstruktur mittels `.json()`. # Anschließend eine kurze Suche nach dem Inhalt "vorliegenden Notebook" um genau diese Zelle zu finden und auszugeben. # In[2]: netzwerk = req.get("https://github.com/haraldschilly/python-fuer-mathematiker/raw/master/doc/4-6-netzwerk.ipynb") notebook = netzwerk.json() # In[3]: import json for cell in notebook["worksheets"][0]["cells"]: if any("vorliegenden Notebook" in block for block in cell.get("source", [""])): text = "".join(cell["source"]) print(text[:400] + "...") # ## HTML # # Webseiten sind in [HTML](http://en.wikipedia.org/wiki/HTML) formatiert. # Die Rohdaten sind ähnlich wie XML in Tags eingeschlossene Textbausteine. # Eine Bibliothek wie [Beautiful Soup](http://www.crummy.com/software/BeautifulSoup/) hilft, # diese Tags einzulesen und als Datenstruktur zu bearbeiten. # Holen wir zum Beispiel die aktuellen Nachrichten, extrahieren ausschließlich die Überschriften des Hauptbereichs, und modifizieren die Links so, dass sie auf die Originalseite verweisen und ein neues Tab öffnen: # In[4]: from bs4 import BeautifulSoup derstandard = BeautifulSoup(req.get("http://derstandard.at").text) # In[5]: from IPython.display import HTML headlines = derstandard.select("div#documentCanvas h2 a") + derstandard.select("div#documentCanvas h3 a") hl_list = BeautifulSoup("