Webseiteninformationen extrahieren

OP #4049819
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.
Gast #4049902
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.
Moderator #4049910
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 11 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.