Forum: PC-Programmierung JavaScript auswerten


von louis (Gast)


Lesenswert?

Ich möchte prinzipiell Daten von dieser Webseite in Variablen speichern.

Das Ergebnis wäre also etwas wie Variable Wert1 hat den Wert 324.09.

Ich möchte das gerne in Python, AppleScript oder Shell (Mac) machen. 
Meinetwegen auch über PHP, wenn das überhaupt geht.

Hat jemand eine Idee wie ich dieses JavaScript lesen und weiter 
verarbeiten kann?

Danke
1
<html>
2
  <head>
3
  </head>
4
  <body>   
5
    <script>
6
        document.write("Wert1: 324.09" );
7
    </script>
8
        <br>
9
    <script>
10
        document.write("Wert32: 4325");
11
    </script>
12
        <br>
13
    <script>
14
        document.write("Wert33: 734");
15
    </script>
16
        <br>
17
    <script>
18
        document.write("Wert9: 5342");
19
    </script> 
20
  </body>
21
</html>

von Test (Gast)


Lesenswert?

Das zauberwort heißt regular expressions

von Silvan K. (silvan) Benutzerseite


Lesenswert?

Das könnte in Python so aussehen:
1
from re import findall
2
3
script="""
4
<html>
5
  <head>
6
  </head>
7
  <body>   
8
    <script>
9
        document.write("Wert1: 324.09" );
10
    </script>
11
        <br>
12
    <script>
13
        document.write("Wert32: 4325");
14
    </script>
15
        <br>
16
    <script>
17
        document.write("Wert33: 734");
18
    </script>
19
        <br>
20
    <script>
21
        document.write("Wert9: 5342");
22
    </script> 
23
  </body>
24
</html>
25
"""
26
27
regex= r"(\w*): ([0-9|\.]*)?\""
28
29
results = findall(regex, script)
30
31
for i in results:
32
    print(i)

Geht aber so ähnlich in jeder beliebigen Programmiersprache, in der es 
reguläre Ausdrücke gibt.

von Peter II (Gast)


Lesenswert?

Silvan König schrieb:
> Das könnte in Python so aussehen:

ich denke nicht das es wirklich die Lösung ist.

Schon wenn man schreibt

 document.write("PI=" + Math.PI);

versagt das script.


Ich würde vermutlich direkt den Browser nutzen, einfach in die Webseite 
noch ein extra Javascript einschleusen und dann mit dem JavaScript die 
fertige Seite Wieder auslesen und an einen Server schicken.

von Roland P. (pram)


Lesenswert?

Google mal nach "Headless Browser". Damit sollte sowas gehen, wenn die 
JS Ausdrücke komplexer sind.

Ansonsten würde ich mir die Werte auch einfach "rausschnipseln"


Gruß
Roland

von Uhu U. (uhu)


Lesenswert?

Test schrieb:
> Das zauberwort heißt regular expressions

Ich würde einen Screenscraper wie z.B. Scrapy http://scrapy.org/ nehmen, 
um die Seite zu zerlegen und anschließend nach script-tags suchen.

Das ist wesentlich einfacher und sicherer, als die kontextfreie Fummelei 
mit regularen Ausdrücken.

von Louis (Gast)


Lesenswert?

Der Code wird natürlich berechnet. Deswegen geht es nicht ganz so 
einfach.

Das obige ist nur ein Beispiel.

von Louis (Gast)


Lesenswert?


von Uhu U. (uhu)


Lesenswert?

Louis schrieb:
> Der Code wird natürlich berechnet.

Wie wärs, wenn du sowas gleich verkündest? Deinem Geschwurbel im 
Eingangsposting ist es jedenfalls nicht zu entnehmen und die 
Threadüberschrift deutet eher auf einen, der von der ganze Sache keine 
Ahnung hat.

von Uhu U. (uhu)


Lesenswert?

Louis schrieb:
> Könnte JSC helfen?
> 
http://www.freshblurbs.com/blog/2011/09/25/command-line-javascript-cli-mac-os-x.html

Ja - nachdem du die Scripte per Screenscraper aus dem Quelltext 
herausgepult hast.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Eine Frage letzlich gleichen Inhalts hat der Threadstarter hier vor ein 
paar Tagen schon mal gepostet:

http://www.mikrocontroller.net/topic/goto_post/4013785

von Mark B. (markbrandis)


Lesenswert?

Ich gebe es offen zu: Ich habe immer noch nicht so recht verstanden, was 
er denn nun eigentlich machen will.

Was sind die Eingangsdaten? In welcher Form genau liegen diese vor? Was 
soll das Ergebnis sein?

Am besten zurück auf Los, keine 4000 einziehen, und nochmal von vorn das 
Ganze. ;-)

von louis (Gast)


Lesenswert?

Ich geb's ja zu, ich war selber nicht so sicher was ich genau machen 
will.

Es handelt sich um ein umfangreiches Script, das Werte berechnet und 
diese über eine Webseite ausgibt. document.write()

Ich brauche nur die Werte, deshalb habe ich nun eine weitere Variante 
ohne HTML angeschaut: JSC

Damit kann ich den JS Code direct ausführen ohne HTML. Nun habe ich aber 
das Problem, dass document.write nicht unterstützt wird.

Wie kann ich das Ergebnis nun im Shell ausgegeben?

von louis (Gast)


Lesenswert?

print() ist die Lösung.

Nun hab eich noch den Code window.SunCalc = SunCalc;

Window kennt JSC aber nicht. Wie kann ich das ersetzen, bzw. was macth 
diese Zeile?

von Karl Käfer (Gast)


Lesenswert?

Hi louis,

louis schrieb:
> Ich geb's ja zu, ich war selber nicht so sicher was ich genau
> machen
> will.
>
> Es handelt sich um ein umfangreiches Script, das Werte berechnet und
> diese über eine Webseite ausgibt. document.write()
>
> Ich brauche nur die Werte, deshalb habe ich nun eine weitere Variante
> ohne HTML angeschaut: JSC
>
> Damit kann ich den JS Code direct ausführen ohne HTML. Nun habe ich aber
> das Problem, dass document.write nicht unterstützt wird.

Ich kenne mich mit JSC nicht aus, aber vielleicht kannst Du eine eigene 
"document"-Klasse mit einer Methode "write()" schreiben? Das Teil muß ja 
nicht mehr können, als die einzelnen Aufrufe der write()-Methode in ein 
Array zu speichern.

HTH,
Karl

von louis (Gast)


Lesenswert?

Danke, mit print() klappt die Ausgabe im Shell.

Was ich nicht verstehe ist, was dieser Code macht:
1
// export as AMD module / Node module / browser variable
2
if (typeof define === 'function' && define.amd) define(SunCalc);
3
else if (typeof module !== 'undefined') module.exports = SunCalc;
4
else window.SunCalc = SunCalc;

window.SunCalc versteht JSC nicht und bricht deswegen ab. Ich würde den 
Code deshalb gerne mit etwas kompatiblen ersetzen.

von node.js (Gast)


Lesenswert?

louis schrieb:
> Was ich nicht verstehe ist, was dieser Code macht:

Kompatibilitäts Boilerplate Copy&Paste snippet, damit derselbe JS-Code 
sowohl client-Seitig (also im Browser) als auch Server-Seitig (z.B. mit 
node.js) laufen kann.

Wenn das Modul deine ganze Berechnung macht:
Nimm gleich node.js und mach die Berechnung darin, ganz ohne virtuelle 
Webbrowser und anderes gehackse.

von louis (Gast)


Lesenswert?

Falls möglich würde ich gerne auf zusätzliche Software verzichten. Kann 
ich den Code denn nicht irgendwie ersetzen? Der ganze Rest funktioniert 
ja, es gibt lediglich kein Fenster auf das referenziert werden kann.

von node.js (Gast)


Lesenswert?

louis schrieb:
> Falls möglich würde ich gerne auf zusätzliche Software verzichten.

Dann mach halt vor dem Codeschnippsel ein
>> var window={};
rein.

von louis (Gast)


Lesenswert?

node.js schrieb:
> var window={};

Manchmal ist es so einfach. Danke!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.