Importieren von Daten aus dem Internet

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

Ich brauche ein paar Ratschläge/Tipps wie man von speziellen Internetseiten bestimmte Werte ablesen kann, die dann in einem Programm verwendet werden können.

z.B. möchte ich die Höchst- und Tiefsttemperatur für den heutigen Tag von der Website http://www.wetteronline.de/Thueringen/Erfurt.htm ablesen und in einem Programm ausgeben lassen.

Wie geht das? Ich wäre über jeden hilfreichen Link und Ratschlag erfreut.
Birne94
User
Beiträge: 90
Registriert: Freitag 28. November 2008, 15:18
Kontaktdaten:

nja. du öffnest die seite mir urlopen

Code: Alles auswählen

f = urlopen("url")
und ermittelst dann per RegEx die gewünschten Daten...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Besser noch: mit einem entsprechenden Parser wie lxml.html. Die nutzung von Mechanize hat sich auch bewährt. Ich sollte mal zu dem Thema einen FAQ-Eintrag schreiben, das wird hier ständig gefragt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

Sorry, aber könntet ihr eventuell mir einen Link schicken wo das ausführlicher erklärt wird.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

danke dafür. gibt es kein deutsches tutorial?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Nein. Die Hardwarevorraussetungen an Programmierer sind "Kann feststellen ob Computer an ist und wenn dies nicht der Fall ist diesen einschalten" und "Kann Englisch". Letzteres ist dank all der Übersetungsfunktionen (Google Translate, Babelfish) und Online-Wörterbücher (LEO und etliche weitere) einfacher als je zuvor, aber eine Investition an brauchbares Englisch zahlt sich mit der Zeit doppelt und dreifach aus.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

Google Translate ist wirklich sehr hilfreich danke. Damit dürfte es zu schaffen sein, wenn ich denoch fragen hab dann werd ich mich hier melden.
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

ein kleines proble: welches modul muss ich importieren um folgende funktionen zu nutzen?

Code: Alles auswählen

url='http://www.google.de'
open_new(url)
open_new_tab(url)
Dann hab ich noch eine Frage zu der folgenden Funktion: Warum wird mir dabei ein Fehler angezeigt?

Code: Alles auswählen

open(url[,new=0[,autoraise=1]])
Also Python meint die kommas müssten weg und es müsste new==1 und autoraise==1 heißen.
Benutzeravatar
snafu
User
Beiträge: 6732
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Boldi hat geschrieben:ein kleines proble: welches modul muss ich importieren um folgende funktionen zu nutzen?

Code: Alles auswählen

url='http://www.google.de'
open_new(url)
open_new_tab(url)
http://docs.python.org/library/webbrowser.html

Dir ist aber klar, dass du damit deinen "normalen" Standardbrowser öffnest, womit es sehr schwierig wird, Daten zu parsen? Nutze wie gesagt einen Parser wie lxml oder BeautifulSoup um an die gewünschten Infos zu kommen.
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

Boldi hat geschrieben: Dann hab ich noch eine Frage zu der folgenden Funktion: Warum wird mir dabei ein Fehler angezeigt?

Code: Alles auswählen

open(url[,new=0[,autoraise=1]])
Also Python meint die kommas müssten weg und es müsste new==1 und autoraise==1 heißen.
Mach die eckigen Klammern weg. In der Doku stehen in den eckigen Klammern optionale Parameter.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Hier ein Beispeil fuer die aktuelle Temperatur in Juelich :wink: :

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re
import urllib2
from BeautifulSoup import BeautifulSoup

def tag2txt(tag):
    replaces = {" ": u"", "°" : u"°"}
    txt = tag.contents[0].strip()
    for (old, new) in replaces.items():
        txt = txt.replace(old, new)
    return txt


try:
    url = urllib2.urlopen("http://www.fz-juelich.de/gs/meteo/metmess1de/")
    soup = BeautifulSoup(url.read())
    temp =  soup.find(text=re.compile("Lufttemperatur")).findNext("td")
    output = u"%s" % tag2txt(temp)    
except urllib2.URLError:
    output = "Unknown"
    
print output.encode("utf-8"),
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

danke das ist mir eine große hilfe, aber bei mir kommt die fehlermeldung das BeautifulSoup unbekannt ist
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Hmm ... und was sagt dir das? Vielleicht solltest du es installieren? http://www.crummy.com/software/BeautifulSoup/
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

Ich hatte irgendwie Probleme mit der Codiererei und habe den Code wie folgt anpassen müssen, um das erwartete Ergebnis zu erzielen.

Code: Alles auswählen

import re
import urllib2
from BeautifulSoup import BeautifulSoup

def tag2txt(tag):
    #1.Anpassung
    replaces = {" ": u"", "°" : u"\xB0"}
    txt = tag.contents[0].strip()
    for (old, new) in replaces.items():
        txt = txt.replace(old, new)
    return txt


try:
    url = urllib2.urlopen("http://www.fz-juelich.de/gs/meteo/metmess1de/")
    soup = BeautifulSoup(url.read())
    temp =  soup.find(text=re.compile("Lufttemperatur")).findNext("td")
    output = u"%s" % tag2txt(temp)
except urllib2.URLError:
    output = "Unknown"

#2. Anpassung
print output
Ansonsten super Snippet.
BlackJack

Man kann BeautifulSoup sagen, dass es HTML-Entities dekodieren soll. Dann braucht man sich da nicht selber drum zu kümmern.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

BlackJack hat geschrieben:Man kann BeautifulSoup sagen, dass es HTML-Entities dekodieren soll. Dann braucht man sich da nicht selber drum zu kümmern.
Ah, sehr schoen. Werd ich mal einbauen...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

So, hier ist die geaenderte Version:

Code: Alles auswählen

#!/usr/bin/env python

import re
import urllib2
from BeautifulSoup import BeautifulSoup

try:
    url = urllib2.urlopen("http://www.fz-juelich.de/gs/meteo/metmess1de/")
    soup = BeautifulSoup(url.read(),
                         convertEntities=BeautifulSoup.HTML_ENTITIES)

    temp =  soup.find(text=re.compile("Lufttemperatur")).findNext("td")
    output = temp.contents[0].string.strip()

except urllib2.URLError:
    output = "Unknown"

print output
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

Danke für eure Hilfe. Das hat mir wirklich sehr geholfen, abe rich hab weiterhin ein Problem. Wenn ich:

Code: Alles auswählen

url = urllib2.urlopen("http://www.wetteronline.de/Thueringen/Erfurt.htm")
soup = BeautifulSoup(url.read(),
                         convertEntities=BeautifulSoup.HTML_ENTITIES)
print soup
dann kommt immer nur :
Bild

ich habs auch schon so probiert:

Code: Alles auswählen

url = urllib2.urlopen("http://www.wetteronline.de/Thueringen/Erfurt.htm")
soup = BeautifulStoneSoup(url.read(), convertEntities=BeautifulStoneSoup.HTML_ENTITIES).contents[0] 
print soup
Würde mich über Ratschläge freuen.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ich würde mal sagen, dass du da ein Gif-Bild erwischt hast ;) Und da das binär is, bekommst du natürlich Datensalat. Konkret würde ich mal auf das Sponsor-Bildchen tippen.
Antworten