Textbrowser: Link folgen

Gast #3569571
Lesenswert?

Hallo,

ich möchte von verschiedenen Webseiten automatisiert Informationen 
auslesen. Dazu möchte ich mir ein shell-Skript schreiben, das auf meinem 
Raspberry läuft und regelmäßig ausgeführt wird. Dieses soll die 
Webseiten mit dem Textbrowser W3M aufrufen und entsprechende Passagen an 
mich per Mail senden.


Leider ist auf manchen Webseiten die gewünschte Information nie unter 
einer festen Adresse erreichbar, sondern man muss ein bis zwei Links 
klicken. Man kann mit "grep" die Zeile mit dem Link suchen, aber wie 
kann man diesem dann automatisiert folgen?

Danke!
Gast #3569612
Lesenswert?

wurst schrieb:
> rss geht nicht?
>
> inwiefern muss man 1-2mal klicken? ist das mit javascript o.ä. gelöst?
>
> ansonsten kann ich meinem vorredner zustimmen: wget mit --mirror option
> oder rekursion einschränken

Er will ja nicht alles herunterladen sondern eine bestimmte Info in 
einem HTML Dokument finden.
Oder habe ich da was falsch verstanden ?
OK wget in grep umleiten geht auch, fragt sich nur wie man da dann einen 
bestimmten Textteil finden und mailen kann ?
Gast #3569631
Lesenswert?

Ich bin da nicht so erfahren...


Habe jetzt wget -r -l1 ausgeführt und mir so ca 10 Dateien 
runtergeladen. Wirklich weitergekommen bin ich dadurch nicht.

@kopfkratzer: genau so soll es sein..
Kannst Du mir Deinen Tipp nochmal etwas genauer erläutern? Danke!
Gast #3569801
Lesenswert?

Hallo Gerald,

wget ist eine nettes Tool, aber ich glaube das was Du brauchst ist Perl 
mit dem Modul WWW::Mechanize.
Das Modul ist richtig nett, ich selbst hole damit meine digitale Version 
der Tageszeitung aus dem Netz und sende sie mir per eMail zu. Die 
Webseite der Tageszeitung sowie das App sind eine Zumutung. Dafür wird 
eine https-Verbindung inkl. Login problemlos mit WWW::Mechanize 
aufgebaut, die richtigen Links gesucht und danach runtergeladen.
Das ganze Skript hat 75 Zeilen! Der Versand erfolgt danach mit dem Perl 
Skript smtp-cli per eMail.
Das alles läuft nachts um 5:30h auf meinem Raspberry und morgens auf dem 
Weg zur Arbeit lese ich in Ruhe meine eMails.

Hier die wichtigen Links:

http://www.linux-magazin.de/Ausgaben/2004/03/Datenruessel
http://www.logix.cz/michal/devel/smtp-cli/

Dieter
Gast #3569832
Lesenswert?

in dem von mir genannten Link wird auch beschrieben wie einfach es es 
mit dem Perl Modul WWW::Mechanize::Shell die Website von einer Shell zu 
bedienen und daraus später dann ein WWW::Mechanize kompatibles Skript zu 
erstellen.
Das geht erstaunlich gut.
Gast #3569841
Lesenswert?

Hier mal ein Simples Beispiel für alle Interessierten:
1
#!/usr/bin/perl -w
2
#use strict;
3
use WWW::Mechanize;
4
use WWW::Mechanize::FormFiller;
5
use URI::URL;
6
#use Date::Calc qw(Today);
7
use Date::Calc qw(Today Day_of_Week Decode_Month
8
                   Add_Delta_YMD Date_to_Days);
9
                   
10
# Titel der einzelnen PDF-Teilausgaben
11
# Achtung es sind nicht an jedem Wochentag alle Teile erhältlich, daher wird weiter unten eine
12
# Schnittmenge zwischen diesem Array und den wirklich erhältlichen Zeitungen gebildet.
13
my @Daten = ("Hauptzeitung", "Lokalteil", "Stellenmarkt", "Immobilien", "Lokalteil 2");
14

15
my $zeitung;
16
my ($year, $month, $day) = Today();
17
my $file2 = sprintf("_%02d_%02d_%d", $day, $month, $year);                   
18
my $agent = WWW::Mechanize->new( autocheck => 1 );
19
my $formfiller = WWW::Mechanize::FormFiller->new();
20

21
$agent->agent('User-Agent=Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.7');
22
$agent->env_proxy();
23

24

25
  $agent->get('https://login.musterzeitung');
26
  $agent->form_number(1) if $agent->forms and scalar @{$agent->forms};
27
  $agent->form_number(2);
28
  $formfiller->add_filler( 'inputLogin' => Fixed => 'mustermann' );
29
  $formfiller->add_filler( 'inputPass' => Fixed => 'mussermannPassword' );     
30
  $formfiller->fill_form($agent->current_form);
31
  $agent->submit();
32
  $agent->follow_link('n' => 1);
33
  $agent->follow_link('n' => 2);
34
  # Debug
35
  $agent->save_content('out.html');
36
  # End/Debug
37
  # Suche den Link mit der Beschriftung 'Download der Zeitung'
38
  $agent->follow_link('text_regex' => qr((?^:Download der Zeitung)));
39
  
40

41
# Linkstext abspeichern
42
my @Alpha;
43
@Alpha = $agent->links();
44
my $x = WWW::Mechanize::Link->new();
45
my @List;
46
foreach $x (@Alpha)
47
{
48
  push(@List,$x->text());
49
}
50

51
# Schnittmenge beider Listen finden
52
my ($el, $el2);
53
foreach $el (@List) {
54
    foreach $el2 (@Daten) {
55
        if (defined $el2 &&  $el =~ /^\Q$el2/ ) {
56
            #print "gefunden\n";
57
            push(@final,$el2);
58
            undef $el2;
59
            last;
60
        }
61
    }
62
}
63

64
# Download Zeitung 
65
foreach $zeitung(@final)
66
{
67
  # Debug
68
  $agent->save_content('out.html');
69
  # End/Debug
70
  
71
  # Zeitung suchen
72
  $agent->find_link('text_regex' => qr((?^:$zeitung)));
73
  if ($agent->success()) {
74
    # den Link folgen
75
    $agent->follow_link('text_regex' => qr((?^:$zeitung)));
76
  # und als PDF speichern
77
    $agent->save_content($zeitung.$file2.'.pdf', binmode => ':raw');
78

79
    print "$zeitung geladen\n";
80
    print $zeitung.$file2. ".pdf geschrieben\n";
81

82
  # wieder zurück
83
    $agent->back();
84
  } else {
85
    print "$zeitung nicht gefunden";
86
  }
87
}
Gast #3584822
Lesenswert?

Nö, ist kein Geheimnis. Ich möchte wöchentlich die Gewinnzahlen der 
AktionMensch Lotterie schicken lassen.

www.aktion-mensch.de  -->  Lotterie --> Alle Gewinnzahlen

Die Adresse der Seite ist ein zufälliger Code, der sich immer ändert - 
warum auch immer.



Momentan hänge ich aber bei der Installation der CPAN Module. Mein 
Raspberry installiert da schon seit Stunden rum...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren