Importieren von Daten aus dem Internet
Man kann BeautifulSoup sagen, dass es HTML-Entities dekodieren soll. Dann braucht man sich da nicht selber drum zu kümmern.
- Rebecca
- User
- Beiträge: 1662
- Registriert: Freitag 3. Februar 2006, 12:28
- Wohnort: DN, Heimat: HB
- Kontaktdaten:
Ah, sehr schoen. Werd ich mal einbauen...BlackJack hat geschrieben:Man kann BeautifulSoup sagen, dass es HTML-Entities dekodieren soll. Dann braucht man sich da nicht selber drum zu kümmern.
Offizielles Python-Tutorial (Deutsche Version)
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
- 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
Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Danke für eure Hilfe. Das hat mir wirklich sehr geholfen, abe rich hab weiterhin ein Problem. Wenn ich:
dann kommt immer nur :
ich habs auch schon so probiert:
Würde mich über Ratschläge freuen.
Code: Alles auswählen
url = urllib2.urlopen("http://www.wetteronline.de/Thueringen/Erfurt.htm")
soup = BeautifulSoup(url.read(),
convertEntities=BeautifulSoup.HTML_ENTITIES)
print soup
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
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:
Woran liegt es das nicht der ganze Quelltext ausgegeben wird? Stattdesen bricht er in der Zeile
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
ab und so komme ich nicht an alle relevanten Daten<div id="logo"><a href="http://www.wetter.com/" title="wetter.com"></a></div></div></div></div></body></html>
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:
dann erscheint folgende Fehlermeldung bei mir:
EDIT: Nochmal eine Frage:
Daraus möchte ich nur die (2) haben, wenn ich nun:<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>
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()
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'
-
- 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.
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.
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
zu meiner Frage:
Aber es muss doch eigentlich etwas gefunden haben, die entsprechende daten sind doch vorhanden
-
- 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.
Danke dir Leonidas für den Hinweis mit XML. das ist wirklich einfach.
Denoch nur kurz zur Kontrolle:
So les ich die Temperatur von http://www.yr.no/place/Germany/Thuringi ... recast.xml aus, oder?
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
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- 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.Boldi hat geschrieben:So les ich die Temperatur von http://www.yr.no/place/Germany/Thuringi ... recast.xml aus, oder?
Achja, das ``mile_to_km = 1.60934`` brauchst du ja wohl bei der Temperatur-Berechnung eher nicht.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
/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!Leonidas hat geschrieben: Achja, das ``mile_to_km = 1.60934`` brauchst du ja wohl bei der Temperatur-Berechnung eher nicht.
Der erste Wert der gefunden wird, ist auch der aktuelle. Das ist also kein Prolem.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.
Ja das gehört da wirklich nicht rein, mein Fehler. Für die Windgeschwindigkeiten brauch ich es aber./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!
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.