Web Links aus einer Webseite/Textdatei filtern / WGET

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von shakky4711, 22.04.2008.

  1. #1 shakky4711, 22.04.2008
    shakky4711

    shakky4711 DOS-FAN

    Dabei seit:
    03.04.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Ort:
    Freiburg
    Hallo,

    ich möchte Updates für den AVG Virenscanner für Rechner die nicht am Internet hängen vollautomatisch von der AVG Webseite laden http://free.grisoft.com/doc/24/us/frt/0

    Alle Versuche direkt mit WGET zum Erfolg zu kommen sind gescheitert. So habe ich den Umweg angedacht zuerst mittels wget diese Webseite lokal runterzuladen und mit durch eine grep Suche nach "*.bin" dieses Ergebnis erzeugt:

    href="http://free.grisoft.com/softw/70free/update/u7setup4869i.bin" onclick="return fc_click('dwn_u7set
    /></td><td class="norm"><a class="dwnprg" href="http://free.grisoft.com/softw/70free/update/u7avi1296u12936p.bin"
    lass="norm"><a class="dwnprg" href="http://free.grisoft.com/softw/70free/update/u7iavi14006p.bin" onclick="return fc_click('dwn_u7i
    ss="norm"><a class="dwnprg" href="http://free.grisoft.com/softw/70free/update/u7f524ov.bin" onclick="return fc_click('dwn_u7f524ov.
    ss="norm"><a class="dwnprg" href="http://free.grisoft.com/softw/70free/update/u7setup510ow.bin"

    Wie kann ich jetzt mit SED oder AWK die Liste zu "nur-Webadressen" zusammenschrumpfen lassen um diese dann an WGET zu übergeben? So stelle ich mir das Ergebnis vor:

    http://free.grisoft.com/softw/70free/update/u7f524ov.bin
    http://free.grisoft.com/softw/70free/update/u7setup510ow.bin
    http://free.grisoft.com/softw/70free/update/u7lxinit11t.bin

    Oder gibt es doch eine einfachere Lösung und ich habe mich nur in etwas verrannt?

    Vielen Dank für Eure Hilfe.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 blue-dev, 22.04.2008
    blue-dev

    blue-dev stranger with blue eyes

    Dabei seit:
    30.06.2007
    Beiträge:
    438
    Zustimmungen:
    0
    Also ich finde das ganze mit Perl viel einfacher zu lösen, hier ein Script der dir alles abnehmen sollte:
    Code:
    #!/usr/bin/perl
    use strict;
    use LWP::UserAgent;
    
    #Url ersetzen:
    my $url = 'http://www.google.de/';
    
    #Neuen LWP::UserAgent initialisieren
    my $agent = LWP::UserAgent->new();
    
    #Http request absetzten
    my $request = HTTP::Request->new('GET', $url);
    
    #Antwort holen
    my $response = $agent->request($request);
    
    #Fehler ausklammern
    if ( $response->is_error() ) { 
            print "Code:        : ", $response->code() ,    "\n";
            print "Fehlermeldung:  ", $response->message() , "\n";	
    }
    else {
    	$_ = $response->content();
    	while (/(http\:\/\/free\.grisoft\.com\/softw\/70free\/update\/.*?\.bin)/g) { 
            print "$&\n"; 
            #oder z.B. system("wget $&"); zum downloaden
            }
    }
    Du musst nur oben die url in die url variable eintragen.
    Du brauchst libwww für perl um das auszuführen weil ich ja damit den Quelltext lade.
     
  4. #3 shakky4711, 23.04.2008
    shakky4711

    shakky4711 DOS-FAN

    Dabei seit:
    03.04.2007
    Beiträge:
    37
    Zustimmungen:
    0
    Ort:
    Freiburg
    Super, vielen Dank, hat genauso geklappt wie es sollte!
     
  5. #4 Tegger, 11.03.2009
    Zuletzt bearbeitet: 11.03.2009
    Tegger

    Tegger Mitglied

    Dabei seit:
    20.11.2006
    Beiträge:
    40
    Zustimmungen:
    0
    könnt mir einer mal helfen ?

    ich bräuchte das für einen datei-input, also die html ist lokal gespeichert...
    und ich krieg das mit open nicht gebacken....

    und wenns nicht zuviel ausmacht, wie ich vielleicht auch gleich noch ein teil ersetzen kann, also wie sed 's/alt?=bla/neu/g'
     
  6. #5 Gott_in_schwarz, 11.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Code:
    perl -nle 'print $& if /linkregex/' infile.html
    $& ist die match-Variable. Siehe dazu auch
    Code:
    perldoc perlvar|less -p '\$\&'
    Für sed-like Ersetzungen:
    Code:
    perl -pe 's/fooregex/bar/'
    Für die cli-Switches (wenns dich denn interessiert) siehe
    Code:
    perldoc perlrun
     
  7. #6 Tegger, 11.03.2009
    Zuletzt bearbeitet: 11.03.2009
    Tegger

    Tegger Mitglied

    Dabei seit:
    20.11.2006
    Beiträge:
    40
    Zustimmungen:
    0
    perl.exe -nle 'print $& if /linkregex/' liste.txt
    "liste.txt" ist syntaktisch an dieser Stelle nicht verarbeitbar.

    Windows ? :)
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    und unter linux kommt nichts...

    ab@NIX:~$ perl -nle 'print $& if /linkregex/' liste.txt
    ab@NIX:~$
     
  8. #7 Gott_in_schwarz, 11.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Wie bitte? liste.txt muss keiner Syntax genügen. Wovon redest du?

    Plenken und offtopic? Oha.

    Ich weiß ja nicht was du mir mit deinem Post sagen willst, aber wenn du in windows unterwegs bist musst du wahrscheinlich einfach aus den single-quotes double-quotes machen. (Afair, cmd.exe quoting wird sicherlich irgendwo dokumentiert sein.)
    Wenn du's nicht auf der cli hinbekommst, hier ist das Ganze mal als "richtiges Skript": (nicht exakt "übersetzt", aber sinngemäß)
    Code:
    use strict; use warnings;
    
    while (my $line = <>) {
        print $& if $line =~ /linkregex/;
    }
    Das andere s/foo/bar/ Skript lässt sich so formulieren:
    Code:
    while (<>) {s/fooregex/bar; print}
    (Bin grade schreibfaul. Was das ganze macht kannst du ja mittels perldoc (sollte es auch in windows geben) nachlesen.)

    edit:
    [ ] Du hast die von mir verwendete Abstraktion "linkregex" verstanden.
     
  9. Tegger

    Tegger Mitglied

    Dabei seit:
    20.11.2006
    Beiträge:
    40
    Zustimmungen:
    0
    nein, da hats grad jetzt erst klick gemacht :)

    und ja ich war unter Windows unterwegs, was ich erhofte mit der perl.exe gezeigt zu haben :)


    aber so ganz krieg ichs immer noch nicht auf die reihe....

    Code:
    cat liste.txt | perl -nle 'print $& if /http\:\/\/*?\.jpg/'
    müsste mir doch alles listen was mit http anfängt und jpg aufhört, oder ?
     
  10. #9 Gott_in_schwarz, 11.03.2009
    Zuletzt bearbeitet: 11.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Nein. Der Asterisk (*) ist ein Quantifier. Ein Quantifier gibt an wie oft das vorangehende Atom vorkommen soll/kann. In diesem Fall quantifiziert dein Asterisk den (escapten) Slash. Das Fragezeichen macht das matching-Verhalten vom Asterisk non-greedy. Das Ende ".jpg" bedeutet "irgendein Zeichen gefolgt von jpg", was du wahrscheinlich nicht willst. (Edit: Schwachfug, der Punkt ist ja escaped.)
    Das wolltest du wahrscheinlich:
    Code:
    m{http://.+?[.]jpg}
    Btw UUOC.
     
  11. Tegger

    Tegger Mitglied

    Dabei seit:
    20.11.2006
    Beiträge:
    40
    Zustimmungen:
    0
    jippi, genau, wenn man vom syntax halt null Ahnung hat :)

    also einen link hab ich dann schon mal, jedoch stehen alle in einer zeile, ohne Umbruch, ich hab so das gefühl, da hast du auch noch ne Lösung :)
     
  12. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  13. #11 Gott_in_schwarz, 12.03.2009
    Zuletzt bearbeitet: 12.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Code:
    perl -nle 'print $& while m{http://.+?[.]jpg}g' infile.html > out.links
    .

    edit:
    simpler und schneller:
    Code:
    perl -nle 'print for m{http://.+?[.]jpg}g' infile.html > out.links
     
  14. Tegger

    Tegger Mitglied

    Dabei seit:
    20.11.2006
    Beiträge:
    40
    Zustimmungen:
    0
    super, jetzt hats geklappt wie es sollte, danke
     
Thema: Web Links aus einer Webseite/Textdatei filtern / WGET
Besucher kamen mit folgenden Suchen
  1. wget auch andere seiten durchsuchen

Die Seite wird geladen...

Web Links aus einer Webseite/Textdatei filtern / WGET - Ähnliche Themen

  1. Soundkarte / 2 Eingänge / Einer funktioniert aber nur Links

    Soundkarte / 2 Eingänge / Einer funktioniert aber nur Links: Hallo, ich hoffe mein Thread ist hier richtig. Mein Problem ist folgendes: Ich habe eine onboard-Soundkarte (NVidia MCP61) und hab an der...
  2. Inhalte einer DB neben Links ausgeben

    Inhalte einer DB neben Links ausgeben: Hallo zusammen. Auf meiner Club-Homepage werden Fotos von Mitgliedern aus einer Datenbank ausgelesen und als weiterführende Links aufgereiht....
  3. links2 schrift verkleinern

    links2 schrift verkleinern: Hallo, in der man page zu links2 steht nicht drin wie man die angezeigt schrift verkleinert. Ich möchte so wie unter Firefox mit Strg+"+" die...
  4. Linksys-Router mit offizieller DD-WRT-Unterstützung

    Linksys-Router mit offizieller DD-WRT-Unterstützung: Linksys und NewMedia-NET haben die Linux-basierte alternative OpenSource-Firmware für WLAN-Router und eingebettete Systeme, »DD-WRT«, auch für die...
  5. Linksys WRT1900ACS fit für OpenWRT

    Linksys WRT1900ACS fit für OpenWRT: Im letzten Jahr hat Belkin mit dem Linksys WRT1900AC einen Nachfolger des in Open-Source-Kreisen beliebten WLAN-Routers WRT54G auf den Markt...