Forum: PC-Programmierung Webseiteninformationen extrahieren


von Julian V. (torten_juli)


Lesenswert?

Ich möchte für ein kleine Projekt Informationen aus dem Netzt 
weiterverarbeiten. Konkret geht es um Wetterdaten, die ich auf einem 
kleinen Webserver nutzen möchte.
Welche Ansätze gibt es, damit man Informationen aus den Webseiten 
extrahieren kann?
Ein Beispiel:
Ich möchte den Temperatuverlauf für den morgigen Tag. Dazu benötige ich 
für jede Stunde die Temperatur. Natürlich ist diese auf der HTML-Seite 
verteilt. Wie kann ich diese verarbeiten bzw. die Informationen für mich 
nutzen.

Am besten wäre Hinweise, wie so etwas unter Linux mit der Shell gehen 
könnte. Aber auch python oder andere Sachen wären möglich. Was wäre da 
generell zu Empfehlen. Ich probier auch gern was neues aus.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Es gibt Dienstleister, die solche Daten in einem sinnvoll verarbeitbaren 
Format zur Verfügung stellen, ohne daß man Webseiten auseinanderpflücken 
("screen scraping") muss.

Siehe z.B.
http://www.worldweatheronline.com/api/
(durchaus auch kostenlos)

von Tom (Gast)


Lesenswert?

Wenn es scraping sein muss:

> Linux mit der Shell
Ein bash-Script mit curl, grep, sed und viel Zeit sowie Fluchen, wenn 
der Anbieter irgendwann die Seite ändert.

Aus eigener Erfahrung: gleich mit Python und Beautiful Soup (oder einer 
ähnlichen Lösung) anfangen, die nicht auf unterster Textebene die 
Seite zerpflückt. Ab einen gewissen Grad der Komplexität wird die 
schnelle einfache bash-Lösung zur Bremse, weil sich der Hauptteil der 
Entwicklung auf "Wie kann ich bash durch obskure Tricks dazu bringen, X 
zu tun?" verschiebt.

von Yalu X. (yalu) (Moderator)


Lesenswert?

In Python kommst du mit den mitgelieferten Bibliotheken mit wenig
Aufwand schon ziemlich weit:

Mit urllib.request kannst du  den HTML-Text einer Webseite einlesen und
mit re per regulärem Ausdruck nach bestimmten Mustern suchen. Falls
reguläre Ausdrücke zu schwach sind, kannst du mit html.parser den
HTML-Text auch syntaktisch analysieren.

Hier ist ein einfaches Beispiel zur Abfrage der aktuellen Temperatur in
Berlin von wetter.com:
1
from urllib.request import urlopen
2
from re import search
3
4
url      = 'http://www.wetter.com/wetter_aktuell/aktuelles_wetter/deutschland/berlin/DE0001020.html'
5
pattern  = r'<div class="degree-in" >\s*(\S*)\s*°C\s*</div>'
6
7
htmltext = urlopen(url).read().decode('utf-8')
8
searchresult = search(pattern, htmltext)
9
if searchresult:
10
  temp = float(searchresult.group(1).replace(',', '.'))
11
  print('Aktuelle Temperatur: %.1f °C' % temp)

Diese Methode der Abfrage funktioniert prinzipiell mit jeder Webseite.
Allerdings musst du bei jeder Änderung des Aufbaus der Webseite deine
Software entsprechend anpassen. Diesbezüglich ist die Verwendung eines
APIs, wie von Rufus vorgeschlagen, vorteilhafter.

von Murkser (Gast)


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.