75772
Goto Top

AUs HTML Code einer Wetterseite Temperaturen oder Windrichtung auslesen - HTML bereits mit wget als txt gespeichert

habe einiges probiert. komme einfach nicht weiter und muss jetzt hier um hilfe bitten.

Hallo Zusammen,
vorgestern habe ich gedacht ich schaffs noch indem ich die verschiedenen anderen Probleme hier durchlese, aber hab leider nicht ganz das passende gefunden und kommt nicht voran mit meinem Problem.

Ich lade mir durch eine Batch datei und mittels wget die folgende HTML seite auf meine Festplatte: http://www.rssweather.com/wx/de/karlsruhe/wx.php
Die HTML seite wird in eine Txt datei kopiert, oder als txt abgespeichert.
Auf diesen Quellcode möchte ich zugreifen und die aktuelle Temperatur und später evtl auch WIndrichtung, Sonnenauf und Untergang auslesen. Es reicht wenn ich den Wert, sagen wir mal 6 (ohne Grad Celsius) mittels "echo >> c:\test.txt " abspeichern kann.

so habe ich mal angefangen, kam aber nicht weiter:

for /f "tokens=2,3* delims=: " %%i in ('findstr /L Temperature: "c:\wetter.txt"') do @echo %%i


vielleicht kann mir jemand einen tipp geben, Danke schonmal! Florian


Ausschnitt der wetter.txt
<div id="current">  
		<p class="summary"><img src="http://rssweather.cachefly.net/images/weather-symbols/mcloudy.png" alt="Mostly Cloudy weather icon" class="icon"/> Mostly Cloudy </p><p class="temp">Temperature: 6&deg;C</p>  

		<dl class="summaryText">  
 			<dt>Humidity:</dt><dd id="humidity">65%</dd>  
   			 			<dt>Wind Speed:</dt><dd id="windspeed">10 KMH</dd>  			 <dt>Wind Direction:</dt><dd id="winddir">N (360&#176;)</dd>  

 <dt>Barometer:</dt><dd id="pressure">    1025 mb   </dd> 			<dt>Dewpoint:</dt><dd id="dewpoint">0&deg;C</dd>  

 			<dt>Heat Index:</dt><dd id="heatindex">6&deg;C</dd>  
 			<dt>Wind Chill:</dt><dd id="windchill">3&deg;C</dd>  
			<dt>Visibility:</dt><dd id="visibility"> 11 km </dd>  

			<dt>Sunrise:</dt><dd>7:22 AM GMT+1</dd>

			<dt>Sunset:</dt><dd>6:00 PM GMT+1</dd>			
		</dl>
		
	<p class="time">Updated: 3:20 PM GMT+1 TUE FEB 24 2009</p>  
</div>

Content-ID: 109881

Url: https://administrator.de/contentid/109881

Ausgedruckt am: 24.11.2024 um 07:11 Uhr

paulepank
paulepank 24.02.2009 um 16:49:55 Uhr
Goto Top
Hallo renardfm,

for /f "delims=&" %%i in ('findstr Temperature wetter.txt') do set grad=%%i  
>>grad.txt echo %grad:~-2%

Es werden die letzten 2 Zeichen vor dem & ausgegeben, falls es mal wärmer wird. face-smile

cu paulepank
bastla
bastla 24.02.2009 um 16:56:31 Uhr
Goto Top
Hallo renardfm und willkommen im Forum!

Mit Batch alleine macht das bei all diesen Sonderzeichen und unstrukturierten Zeilen keinen Spaß - mit Einbindung von etwas VBS sollte es aber klappen:
@echo off & setlocal
set "Datei=C:\Wetter.txt"  

set SucheTemp="Temperature: (\d+)&deg;"  
set SucheWR="(\d+)&#176;"  

set G=%temp%\GetTemp.vbs
>%G%  echo Set a=WScript.Arguments:T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll:P=a(1)  
>>%G% echo Set rE=New RegExp:rE.IgnoreCase=True:rE.Pattern=P:Set Res=rE.Execute(T):For Each R In Res:WScript.Echo R.SubMatches(0):Next

for /f %%i in ('cscript //nologo %G% "%Datei%" %SucheTemp%') do set "T=%%i"  
if defined T echo Temperatur:   %T%

for /f %%i in ('cscript //nologo %G% "%Datei%" %SucheWR%') do set "WR=%%i"  
if defined WR echo Windrichtung: %WR%
Das (durch den Batch erstellte) VBScript sucht mittels "Regulärer Ausdrücke" nach dem ersten Auftreten des übergebenen Strings (zB "Temperature: Zahl&deg;") und gibt nur die gefundene Zahl zurück. Die Schreibweise für die gesuchte Zahl (nur Ziffern) im Suchstring ist dabei "(\d+)"

Durch mehrmaligen Aufruf mit unterschiedlichen Suchbegriffen (siehe zB Variable %SucheWR%) können verschiedene Werte ausgelesen werden.

Grüße
bastla
75772
75772 24.02.2009 um 16:59:08 Uhr
Goto Top
puh, vielen Dank!!

jetzt hab ich wieder was zu basteln face-smile

einen schönen abend noch!!
NBTKetchup
NBTKetchup 14.03.2011 um 21:08:37 Uhr
Goto Top
HI zusammen

kann man damit auch Textteile auslesen weil wenn ich das richtig verstanden hab kann (\d+) nur Zahlenwerte annehmen?!

in dem Beispiel oben zB will ich die Visibility: nicht nur mit 11 aulesen sondern er soll das 11km auslesen, am besten unabhängig davon wieviel Zeichen der Text hat einfach bis das nächste Trennzeichen kommt in diesem Fall </dd>

LG Ket
bastla
bastla 14.03.2011 um 21:50:17 Uhr
Goto Top
Hallo NBTKetchup!

Wegen der Anführungszeichen ist das etwas tricky - aber so sollte es klappen:
@echo off & setlocal
set "Datei=C:\Wetter.txt"  

set SucheTemp="Temperature: (\d+)ø"  
set SucheWR="(\d+)ø"  
set SucheVis="<dd id=@visibility@>(.+)</dd>"  

set G=%temp%\GetTemp.vbs
>%G%  echo Set a=WScript.Arguments:T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll:P=Replace(a(1),"@","""")  
>>%G% echo Set rE=New RegExp:rE.IgnoreCase=True:rE.Pattern=P:Set Res=rE.Execute(T):For Each R In Res:WScript.Echo Trim(R.SubMatches(0)):Next

for /f %%i in ('cscript //nologo %G% "%Datei%" %SucheTemp%') do set "T=%%i"  
if defined T echo Temperatur:   %T%

for /f %%i in ('cscript //nologo %G% "%Datei%" %SucheWR%') do set "WR=%%i"  
if defined WR echo Windrichtung: %WR%

for /f "delims=" %%i in ('cscript //nologo %G% "%Datei%" %SucheVis%') do set "Vis=%%i"  
if defined Vis echo Visibility: %Vis%
Den Anführungszeichen-Ersatz "@" kannst Du auch variieren (im Suchstring und in Zeile 9 muss er aber natürlich übereinstimmen) ...

Grüße
bastla
NBTKetchup
NBTKetchup 15.03.2011 um 10:36:33 Uhr
Goto Top
Hi bastla

tausend dank du hast mir sehr weiter geholfen face-smile

LG Ket