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:

Gibt es eine Möglichkeit denoch an die gewünschten Daten, in diesem Fall die Höchst- und Tiefsttemparatur, zu kommen? Am besten mit dem gleichen Weg wie bei der Temperatur aus Jülich.

EDIT:

Code: Alles auswählen

try: 
    url = urllib2.urlopen("http://www.wetter.com/wetter_aktuell/wettervorhersage/3_tagesvorhersage/?id=DE0002469/") 
    soup = BeautifulSoup(url.read(), 
                         convertEntities=BeautifulSoup.HTML_ENTITIES)
print soup
Woran liegt es das nicht der ganze Quelltext ausgegeben wird? Stattdesen bricht er in der Zeile
<div id="logo"><a href="http://www.wetter.com/" title="wetter.com"></a></div></div></div></div></body></html>
ab und so komme ich nicht an alle relevanten Daten
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also die URL tut bei mir gar nicht - schätze dass das ein Fehler sein könnte ;)
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

Ich danke allen die mir direkt/indirekt geholfen haben mein Problem zu lösen. Ich hab eine mit wetter24.de eine Homepage gefunden von der man ohne Probleme an die gewünschen Daten kommt.

EDIT: Nochmal eine Frage:
<td width="83" class="first">Windgeschw. Bft (km/h)</td>
<td width="54"><div class="wind"><div class="bft">1</div><div class="kmh">(2)</div></td>
Daraus möchte ich nur die (2) haben, wenn ich nun:

Code: Alles auswählen

url = urllib2.urlopen("http://www.wetter24.de/de/home/wetter/weltwetter/ortewetter.html?cityID=49X16528&tx_mgcityweatherstatic_pi1[cityIDuse]=49X16528") 
soup = BeautifulSoup(url.read(), convertEntities = BeautifulSoup.HTML_ENTITIES) 
temp =  soup.find(text=re.compile("Windgeschw. Bft (km/h)")).findNext("td") 
output = temp.contents[0].string.strip() 
dann erscheint folgende Fehlermeldung bei mir:
Traceback (most recent call last):
File "C:***\wetter.py", line 18, in <module>
temp = soup.find(text=re.compile("Windgeschw. Bft (km/h)")).findNext("td")
AttributeError: 'NoneType' object has no attribute 'findNext'
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dann wird er wohl nichts gefunden haben.

Es ist mir sowieso völlig unklar, warum man Wetterdaten aus HTML scrapen will, wenn die doch durchaus als XML verfügbar sind, so wie sie etwa das WeatherApplet verwendet. yr.no scheint mir eine ziemlich brauchbare Quelle zu sein.

Und ein Client dafür ist absolut trivial. Ich will aber trotzdem bessere Selektoren in ElementTree.
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

Oh dies Variante war mir bis jetzt nicht bekannt. Ich werd es morgen mal ausprobieren.

zu meiner Frage:
Aber es muss doch eigentlich etwas gefunden haben, die entsprechende daten sind doch vorhanden
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Da wird nichts gefunden, weil es ein regulärer Ausdruck ist. In dem haben Zeichen wie ``.``, ``(`` und ``)`` eine spezielle Bedeutung, also musst du sie selbst escapen (fluchten?) oder Python sagen, dass es escaped werden soll.
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

Danke dir Leonidas für den Hinweis mit XML. das ist wirklich einfach.

Denoch nur kurz zur Kontrolle:

Code: Alles auswählen

# -*- coding: UTF-8 -*-

from __future__ import with_statement
from urllib import urlopen
from contextlib import closing
from xml.etree import ElementTree as ET

mile_to_km = 1.60934
url = 'http://www.yr.no/place/Germany/Thuringia/Nordhausen/forecast.xml'

with closing(urlopen(url)) as remote:
    root = ET.fromstring(remote.read())
    first_match = root.find('.//temperature')
    temperature = float(first_match.attrib['value'])
    print temperature
So les ich die Temperatur von http://www.yr.no/place/Germany/Thuringi ... recast.xml aus, oder?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Boldi hat geschrieben:So les ich die Temperatur von http://www.yr.no/place/Germany/Thuringi ... recast.xml aus, oder?
Wenn es den richtigen Wert anzeigt, würde ich stark auf "Ja" tippen. Achja, ``find`` findet den ersten Treffer, im XML sind in der Regel mehrere Daten. Musst schauen ob du wirklich diesen Treffer haben willst.

Achja, das ``mile_to_km = 1.60934`` brauchst du ja wohl bei der Temperatur-Berechnung eher nicht.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Leonidas hat geschrieben: Achja, das ``mile_to_km = 1.60934`` brauchst du ja wohl bei der Temperatur-Berechnung eher nicht.
/dev/glaskugel sagt mir, dass er es nicht bei der Temperatur belässt, sondern auch noch Wingeschwindigkeit usw. auslesen möchte ;-) Aber generell hast Du natürlich Recht, dass es zu diesem Bsp. nicht dazu gehört!
Boldi
User
Beiträge: 32
Registriert: Montag 29. Dezember 2008, 11:02
Wohnort: Erfurt
Kontaktdaten:

Wenn es den richtigen Wert anzeigt, würde ich stark auf "Ja" tippen. Achja, ``find`` findet den ersten Treffer, im XML sind in der Regel mehrere Daten. Musst schauen ob du wirklich diesen Treffer haben willst.
Der erste Wert der gefunden wird, ist auch der aktuelle. Das ist also kein Prolem.
Achja, das ``mile_to_km = 1.60934`` brauchst du ja wohl bei der Temperatur-Berechnung eher nicht.
/dev/glaskugel sagt mir, dass er es nicht bei der Temperatur belässt, sondern auch noch Wingeschwindigkeit usw. auslesen möchte Aber generell hast Du natürlich Recht, dass es zu diesem Bsp. nicht dazu gehört!
Ja das gehört da wirklich nicht rein, mein Fehler. Für die Windgeschwindigkeiten brauch ich es aber. :wink:
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

mile_to_km würde ich allerdings komplett groß schreiben, ist schliesslich eine Konstante. Bei dem Namen würde ich sonst eher eine Funktion dahinter vermuten.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ist es bei XML nicht so, dass die Reihenfolge der Knoten egal ist? Dann ist die Tatsache dass der erste Treffer der aktuellste nur implementationsdetail und kann sich jederzeit ändern.
BlackJack

Generell ist es nicht egal, nur wenn die Formatbeschreibung sagt, dass es egal ist. Attribute haben keine feste Reihenfolge, aber Knoten schon. Stell Dir mal vor das würde bei XHTML nicht gelten, dann dürften Browser ja einfach so Absätze beliebig vertauschen. :-)
Antworten