RE: Mit Kommandozeilentools Formular im Internet ausfüllen, abfragen und auswerten?
"Markus Heidinger" <suselist@mh-infoman.com> schrieb am 05.10.05 09:55:14:
Karl Sinn wrote at Wednesday, October 05, 2005 9:18 AM
So ist das Formular deklariert:
<form name=advBook method="get" action="/advanced/book.do">
Kann ich dann einfach durch:
wget www.test.de/suche.html?var1=Test1&var2=Test2
die Parameter übergeben?
Siehe Antwor von David Haller.
Ob (und wie) das direkt von wget aus funktioniert, weiss ich nicht, aber es sollte doch kein Problem sein, die empfangene HTML-Datei, die ja lokal abgespeichert wird, dann durch ein grep zu jagen, oder?
Könnte man schon machen, aber gibt es keine direkte Möglichkeit? Kann man nicht Z.B.: dem grep auf irgendeine Art und Weise die URL direkt mitgeben?
Also das GET von David Haller hab ich auch nirgendwo gefunden, aber ich denke, da werden wir sicher noch aufgeklärt.
Andere Idee, gerade in der Manpage von wget gefunden: mit der Option -O speichert wget die empfangene Datei nicht ab sondern schreibt sie nach stdout, das heisst so kannst Du dann auf alle Fälle ein "| grep sonstnochwas" anhängen.
HTH
Beste Grüße, Markus
-- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-linux-unsubscribe@suse.com Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-linux-help@suse.com
Hallo zusammen.... Die blanko -O Option im Zusammenhang mit stdout funktioniert bei meinem wget jedenfalls nicht. Ich sehe die Möglichkeit mittels eines einfachen Shell-Scripts, welches eine temporäre Datei anlegt und im Anschluss direkt wieder löscht... könnte in etwa so aussehen.... #!/bin/bash url=$1 searchStringForGrep=$2 wget --user-agent="Mozilla" --output-document="temp" --quiet $url grep -i $searchStringForGrep temp rm temp Naja einen schönen Ouput erzeugt das meistens jedoch nicht, da der html-Code meistens nicht besonders schön formatiert ist und mittels von Cgi Programmen oder ähnlichem zusammen- "gescript" ist. Die CT hatte vor kurzem einen Artikel der genau derartige Probleme abhandelte, wohl im Zusammenhang mit einigen Perl-Libraries... vielleicht nochmal nach googlen.. Ansonsten kommt man wohl nicht um ein wenig Skript-Arbeit herum... Php im Zusammenhang mit dem Kommandozeileninterpreter dürfte reichlich Möglichkeiten bieten. Normalerweise sollte dort schon die file( $url ) - Funktion ausreichen. so far... keep rocking.... ______________________________________________________________ Verschicken Sie romantische, coole und witzige Bilder per SMS! Jetzt bei WEB.DE FreeMail: http://f.web.de/?mc=021193
Hallo, Erst mal Danke an David, mit -q und -O - funktioniert es sehr gut mit wget. Am Mittwoch, 5. Oktober 2005 13:28 schrieb evil-leeroy@web.de:
Naja einen schönen Ouput erzeugt das meistens jedoch nicht, da der html-Code meistens nicht besonders schön formatiert ist und mittels von Cgi Programmen oder ähnlichem zusammen- "gescript" ist. Die CT hatte vor kurzem einen Artikel der genau derartige Probleme abhandelte, wohl im Zusammenhang mit einigen Perl-Libraries... vielleicht nochmal nach googlen..
Das ist dann auch schon die nächste Frage. Wie werde ich die unnötigen HTML-Anweisungen los? Am liebsten hätte ich die Seite so wie sie von lynx angezeigt wird. Geht das? Gruss Karl
Karl Sinn wrote at Wednesday, October 05, 2005 11:39 PM
Das ist dann auch schon die nächste Frage. Wie werde ich die unnötigen HTML-Anweisungen los?
Am liebsten hätte ich die Seite so wie sie von lynx angezeigt wird. Geht das?
Also bis jetzt dachte ich, du willst genau die ISBN aus der emfpangenen HTML Seite extrahieren, was nach Analyse der HTML Datei mit Hilfe von grep (Zeile) und sed (ISBN Nummer) sicher möglich gewesen wäre. Jetzt auf einmal soll es doch die ganze Seite sein ... Warum also dann der ganze Aufwand mit stdout? Dann wäre es doch am einfachsten, die Seite doch abzuspeichern und mit lynx anzeigen zu lassen, lynx kann man beim Aufruf den URL bzw Pfad (für lokale Dateien) ohne weiteres mitgeben. Oder Du rufst gleich lynx mit dem ganzen URL inkluseve den Formulardaten auf und sparst dir wget ... Oder hab ich da jetzt etwas falsch verstanden? Beste Grüße, Markus
Hallo, Am Wed, 05 Oct 2005, Markus Heidinger schrieb:
Also bis jetzt dachte ich, du willst genau die ISBN aus der emfpangenen HTML Seite extrahieren, was nach Analyse der HTML Datei mit Hilfe von grep (Zeile) und sed (ISBN Nummer) sicher möglich gewesen wäre.
*WAAHH* Bei grep 'REGEX' | sed 'SEDBEFEHL(E)' ist das 'grep' IMMER ueberfluessig!!! Und durch sed -n '/REGEX/{SEDBEFEHL(E);p;}' ersetzbar [1]. Bsp: grep `id -un` /etc/passwd | sed 's/.*:\([^:]*\)$/\1/' ist aequivalent zu: sed -n "/`id -un`/s/.*:\([^:]*\)$/\1/p" /etc/passwd und sed -n "/`id -un`/{ s/.*:\([^:]*\)$/\1/; p; }" /etc/passwd Mal ganz abgesehen davon, dass fuer das auslesen der /etc/passwd awk oder besser noch id und getent wesentlich besser geeignet sind. Das ist hier nur als Demo gedacht, denn die passwd hat hier wohl jeder vorliegen ;) -dnh [1] Falls nur _ein_ 's///' Befehl verwendet wird kann man auch den 'p' Modifier dieses Befehls verwenden, d.h. statt: '{s///;p;}' nur 's///p'. -> RTFM sed. -- " ... the spammers are out there breeding like methamphetamine-crazed rats on Viagra ... ." -- Steve VanDevender, in the Monastery
David Haller wrote at Thursday, October 06, 2005 1:50 AM Hallo David, Gehört jetzt nicht zum Thema, aber nachdem es nicht zum ersten Mal vorkommt:
*WAAHH*
Bei
grep 'REGEX' | sed 'SEDBEFEHL(E)'
ist das 'grep' IMMER ueberfluessig!!! Und durch [...] [1] Falls nur _ein_ 's///' Befehl verwendet wird kann man auch den 'p' Modifier dieses Befehls verwenden, d.h. statt: '{s///;p;}' nur 's///p'. -> RTFM sed.
Ist so etwas wirklich notwendig? Ich glaube, mich erinnern zu können, dass man das "blame" nennt und es steht in keiner Netiquette, dass so etwas erwünscht wäre, im Gegenteil. Sinn von Mailinglisten wie auch Usenet und diversen Foren ist es IMHO, dass _alle_ Beteiligten aus Problemstellungen und den zugehörigen Lösungen lernen, abgesehen davon erweitert man auch noch seinen Horizont auf Grund der häufig unerwarteten Fülle an Möglichkeiten. Beim Versuch, zu helfen, können (und IMHO dürfen auch) immer auch Fehler passieren, da kannst Du Dich nicht mal selber ausnehmen, wie wir diese Woche schon gesehen haben. Sind also derartig herablassende Kommentare wirklich nötig? Ich denke nicht, im Gegenteil. Ich überlege mir schon jedesmal, hier überhaupt noch irgendetwas zu posten weil die Wahrscheinlichkeit so groß ist, dass es einen derartigen Kommentar (meist von Dir) gibt. Und das ist schlicht und ergreifend kontraproduktiv. Nicht, dass ich beleidigt wäre oder das nicht aushalten würde, dennoch ist so etwas ärgerlich. Beste Grüße, Markus
Hallo, Am Thu, 06 Oct 2005, Markus Heidinger schrieb:
David Haller wrote at Thursday, October 06, 2005 1:50 AM [..]
*WAAHH* [useless use of grep] Ist so etwas wirklich notwendig? Ich glaube, mich erinnern zu können, dass man das "blame" nennt und es steht in keiner Netiquette, dass so etwas erwünscht wäre, im Gegenteil.
Lieber Markus, pruefe bitte mal, ob dein Ironiedetektor nicht ein wenig justiert werden sollte. Ein "flame" liest sich deutlich anders. Sowas wie oben ist nicht persoenlich gemeint. Es gibt nunmal ein paar Dinge, die fast sowas wie einen Pawlowschen Reflex ausloesen. Schau ggfs. mal ins Archiv. Such z.B. nach "WAAA" und mir als Autor. -dnh --
Das Autofahrersyndrom: Prüft Euren Ton. -- Peter Lipp *anschlag* *bonk* Stimmt, der Ton ist nicht sonderlich... -- David Haller in suse-linux
Hallo, Am Mittwoch, 5. Oktober 2005 23:48 schrieb Markus Heidinger:
Also bis jetzt dachte ich, du willst genau die ISBN aus der emfpangenen HTML Seite extrahieren, was nach Analyse der HTML Datei mit Hilfe von grep (Zeile) und sed (ISBN Nummer) sicher möglich gewesen wäre.
Jetzt auf einmal soll es doch die ganze Seite sein ... Warum also dann der ganze Aufwand mit stdout? Dann wäre es doch am einfachsten, die Seite doch abzuspeichern und mit lynx anzeigen zu lassen, lynx kann man beim Aufruf den URL bzw Pfad (für lokale Dateien) ohne weiteres mitgeben. Oder Du rufst gleich lynx mit dem ganzen URL inkluseve den Formulardaten auf und sparst dir wget ...
Oder hab ich da jetzt etwas falsch verstanden?
Die ISBN!! Das suche ich :-) Ich versuche hier Stück für Stück an die ISBN ranzukommen. Es wäre halt im Moment Übersichtlicher wenn ich "Klartext" anstelle von HTML hätte. Gruss Karl
Karl Sinn wrote at Thursday, October 06, 2005 1:29 PM
Oder hab ich da jetzt etwas falsch verstanden?
Die ISBN!! Das suche ich :-) Ich versuche hier Stück für Stück an die ISBN ranzukommen. Es wäre halt im Moment Übersichtlicher wenn ich "Klartext" anstelle von HTML hätte.
Naja mit sed ist das möglich ... Siehe auch David Hallers Postings. Im Prinzip müsstest Du zunächst ein Charakteristikum für die Zeile des HTML-Codes finden, die einzigartig in der HTML Datei ist, vielleicht ja sogar der String "ISBN", kenne ja die Seite nicht. Einfach mal den Quellcode in einem Texteditor analysieren. Im zweiten Schritt dann die ISBN in der Zeile finden. Wenn ich mich recht entsinne, dann ist eine ISBN 13 stellig, 10 Ziffern und drei Bindestriche, letztere nicht am Anfang und am Ende. Die letzte "Ziffer" kann auch ein "X" sein ... Sollte so aussehen, wenn am Anfang "ISBN" gefolgt von einem Leerzeichen steht, ansonsten den entsprechenden Teil einfach weglassen oder adaptieren. ^ISBN\s(?=[-0-9xX ]{13}$)(?:[0-9]+[- ]){3}[0-9]*[xX0-9]$ (nur kurz getesteter Schnellschuss ...) Naja und wie man das ganze an sed verfüttert hat David Haller schon erklärt. HTH Grüße, Markus
Hallo, ich habe jetzt eine Weile in sed reingeschaut, muss aber sagen: Ich versteh nur Bahnhof.. Am Donnerstag, 6. Oktober 2005 13:47 schrieb Markus Heidinger:
Im Prinzip müsstest Du zunächst ein Charakteristikum für die Zeile des HTML-Codes finden, die einzigartig in der HTML Datei ist, vielleicht ja sogar der String "ISBN", kenne ja die Seite nicht. Einfach mal den Quellcode in einem Texteditor analysieren.
Im zweiten Schritt dann die ISBN in der Zeile finden. Wenn ich mich recht entsinne, dann ist eine ISBN 13 stellig, 10 Ziffern und drei Bindestriche, letztere nicht am Anfang und am Ende. Die letzte "Ziffer" kann auch ein "X" sein ... Sollte so aussehen, wenn am Anfang "ISBN" gefolgt von einem Leerzeichen steht, ansonsten den entsprechenden Teil einfach weglassen oder adaptieren.
^ISBN\s(?=[-0-9xX ]{13}$)(?:[0-9]+[- ]){3}[0-9]*[xX0-9]$
Ist das denn immer so kompliziert? Ich habe das Ergebniss der ersten Seite mal untersucht. Dort steht die ISBN nicht direkt drin, sondern nur eine ProductID und zwar in der Form PRID=654548754& kann man nicht irgendwie mit PRID=.*& diese Nummer auslesen? Ich weiss die Frage ist doof, denn ich habs ja probiert, aber nicht geschafft :-) Wie geht das? Gruss Karl
Hallo, Am Thu, 06 Oct 2005, Karl Sinn schrieb:
ich habe jetzt eine Weile in sed reingeschaut, muss aber sagen: Ich versteh nur Bahnhof..
Das gibt sich, wenn man mal systematisch rumprobiert ;) Und such ggfs. mal hier im Archiv, da haben andere und ich schon haeufiger auch Grundlagen zu sed erklaert bzw. die Punkte, bei denen es besonders gern zum "Bahnhofs"-Syndrom kommt ;)
Am Donnerstag, 6. Oktober 2005 13:47 schrieb Markus Heidinger:
^ISBN\s(?=[-0-9xX ]{13}$)(?:[0-9]+[- ]){3}[0-9]*[xX0-9]$
Ist das denn immer so kompliziert?
Nein. Und obiges ist keine Regex, die sed versteht. Obiges ist eine Perl-Regex, die sich auch nicht in eine POSIX-BRE (-Basic Regular Expression) die sed versteht uebersetzen laesst. Ich wuerde das spontan so schreiben: sed -n 's/ISBN \+\([0-9-]*\) /\1/; s/-//gp;' Das macht aber etwas leicht anderes.
Ich habe das Ergebniss der ersten Seite mal untersucht. Dort steht die ISBN nicht direkt drin, sondern nur eine ProductID und zwar in der Form PRID=654548754&
kann man nicht irgendwie mit PRID=.*& diese Nummer auslesen?
Doch. sed -n 's/PRID=\([0-9]\+\)&/\1/p' Vielleicht kannst du uns ja mal verraten um welche Webseite es geht und was du daraus auslesen willst (und was du dann weiter damit machen willst). -dnh -- Speed doesn't kill... Impact does. -- David Wilcox
Hallo David, Hallo Christian, mit Eurer Hilfe, und der Linuxfibel.de habe ich es geschafft die PRID's herauszufiltern. Jetzt kommt schon das nächste Problem, denn als Ergebnis habe ich eine lange Liste von ID's die alle verfolgt werden müssen um an die ISBN zu kommen. Ich fürchte dass ich das mit einer Befehlszeile nicht schaffen werde. Ich werde mir jetzt mal in Ruhe die Bash-Programmierung anschauen, und auch die Perl-Vorschläge die David gemacht hat. Vielen Dank für die Hilfe Gruss Karl
Hallo Karl, hallo Leute, Am Donnerstag, 6. Oktober 2005 15:16 schrieb Karl Sinn:
ich habe jetzt eine Weile in sed reingeschaut, muss aber sagen: Ich versteh nur Bahnhof..
s/Bahnhof/Fahrplan/ *g* & SCNR [...]
Ich habe das Ergebniss der ersten Seite mal untersucht. Dort steht die ISBN nicht direkt drin, sondern nur eine ProductID und zwar in der Form PRID=654548754&
kann man nicht irgendwie mit PRID=.*& diese Nummer auslesen?
Ich vermute einfach mal, dass diese PRID innerhalb eines Links auftaucht, also beispielsweise <a href="index.php?PRID=654548754&view=all">Zum Artikel</a> Um da mit sed nur die Artikelnummer auszugeben, geht folgendes echo '<a href="index.php?PRID=654548754&view=all">Zum Artikel</a>' | sed -n '/index.php?PRID=/ s/.*PRID=\([0-9]*\)&.*/\1/p' Falls die Artikelnummer auch andere Zeichen enthält, ist [0-9] entsprechend zu ergänzen, z. B. [0-9a-zA-Z]. Alternativ kannst Du auch eine Negativsyntax verwenden: [^&"] - dann werden alle Zeichen außer & und " erkannt. Wenn Du das Ergebnis in einer Bash-Variable haben willst, geht das mit nummer="` echo ... | sed ... `" echo $nummer Gruß Christian Boltz -- Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Hallo, Am Wed, 05 Oct 2005, Karl Sinn schrieb:
Erst mal Danke an David, mit -q und -O - funktioniert es sehr gut mit wget. [..] Das ist dann auch schon die nächste Frage. Wie werde ich die unnötigen HTML-Anweisungen los?
Solange es sich um "GET" Anfragen handelt: lynx -dump URL | grep bla w3m -dump URL | grep bla Ggfs. kannst du auch die wget (oder GET) Ausgabe an irgendwas_das_html_ausgibt | w3m -dump -T text/html verfuettern. 'w3m -dump -T text/html' ist also ein 'html2ascii' Filter. Aber, v.a. wenn du mit der Ausgabe noch mehr machen willst dann wuerde ich dir sehr empfehlen, alles auf Perl umzustellen. Falls zu z.B. ein Formular "fernbedienen" willst empfiehlt es sich, sich mal WWW::Mechanize anzuschauen. Oder generell WWW::*. Such mal auf search.cpan.org danach und/oder per 'cpan' und dann 'm/WWW::/', da findest du massig Module fuer allerlei Zwecke... Nicht, dass du was nachbaust, was es schon gibt... -dnh -- "I think there is a world market for maybe five computers." -- Thomas Watson, chairman of IBM, 1943.
Hallo, Am Mittwoch, 5. Oktober 2005 23:51 schrieb David Haller:
lynx -dump URL | grep bla
Das funktioniert gut, und ist übersichtlich.
w3m -dump URL | grep bla
Hier bekomme ich noch ein paar Sachen mehr angezeigt. Das hilft mir weiter.
Aber, v.a. wenn du mit der Ausgabe noch mehr machen willst dann wuerde ich dir sehr empfehlen, alles auf Perl umzustellen. Falls zu z.B. ein Formular "fernbedienen" willst empfiehlt es sich, sich mal WWW::Mechanize anzuschauen. Oder generell WWW::*. Such mal auf search.cpan.org danach und/oder per 'cpan' und dann 'm/WWW::/', da findest du massig Module fuer allerlei Zwecke...
Nicht, dass du was nachbaust, was es schon gibt...
Hmm... Jetzt fängt es an kompliziert zu werden. Ich werde mir das aber mal anschauen. Ich werde mir auch sed mal genauer anschauen. Vielleicht hilft mir das ja weiter. Vielen Dank für die Hilfe Gruss Karl
participants (5)
-
Christian Boltz
-
David Haller
-
evil-leeroy@web.de
-
Karl Sinn
-
Markus Heidinger