Seite 2 von 2
Verfasst: Donnerstag 5. Februar 2009, 17:51
von Boldi
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
ab und so komme ich nicht an alle relevanten Daten
Verfasst: Donnerstag 5. Februar 2009, 19:25
von Leonidas
Also die URL tut bei mir gar nicht - schätze dass das ein Fehler sein könnte

Verfasst: Donnerstag 5. Februar 2009, 20:04
von Boldi
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'
Verfasst: Donnerstag 5. Februar 2009, 22:49
von Leonidas
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.
Verfasst: Donnerstag 5. Februar 2009, 23:20
von Boldi
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
Verfasst: Donnerstag 5. Februar 2009, 23:57
von Leonidas
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.
Verfasst: Freitag 6. Februar 2009, 14:07
von Boldi
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?
Verfasst: Freitag 6. Februar 2009, 18:12
von Leonidas
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.
Verfasst: Samstag 7. Februar 2009, 00:38
von Hyperion
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!
Verfasst: Samstag 7. Februar 2009, 15:29
von Boldi
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.

Verfasst: Samstag 7. Februar 2009, 17:15
von DasIch
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.
Verfasst: Samstag 7. Februar 2009, 19:33
von Leonidas
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.
Verfasst: Samstag 7. Februar 2009, 20:54
von 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.
