Forum: PC-Programmierung Webseiteninformationen extrahieren


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Julian V. (torten_juli)


Bewertung
0 lesenswert
nicht 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) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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:
from urllib.request import urlopen
from re import search

url      = 'http://www.wetter.com/wetter_aktuell/aktuelles_wetter/deutschland/berlin/DE0001020.html'
pattern  = r'<div class="degree-in" >\s*(\S*)\s*°C\s*</div>'

htmltext = urlopen(url).read().decode('utf-8')
searchresult = search(pattern, htmltext)
if searchresult:
  temp = float(searchresult.group(1).replace(',', '.'))
  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)


Bewertung
0 lesenswert
nicht lesenswert

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.