Sida 1 av 1

bashscript

Postat: 29 mar 2010, 09:20
av linusj87
Jag vill skriva ett bash-script, dock klarar jag inte av det med mina kunskaper.
Det scriptet ska göra är att söka gå igenom ett (stort) antal webbsidor och kolla vilka som går att kolla på.
tex https://connect.sunet.se/p78054136
det är en acobe connect-film, det är alltså sådanna filmer jag är ute efter.
Är det möjligt att skriva ett skrip som går igenom alla https://connect.sunet.se/p00000000 - 99999999 sidor och skriver ut de fungerande sidorna på ett txt-dokument?

Det är alltså nästan 100000000 sidor att gå igenom. Mycket alltså. Är det ens möjligt?

Re: bashscript

Postat: 29 mar 2010, 09:43
av Dr Phil
Det är väldigt många sidor att kolla igenom.
Låt oss anta att du faktiskt hinner kolla upp så mycket som tre sidor per sekund och att du har på en dator som testar sidor dygnet runt.

100000000/(3*60*60*24*365) = 1.05

Då skulle du vara färdig på lite drygt ett år.
Men ja, rent teoretiskt skulle du kunna bygga ett script som testar varenda sida.

Re: bashscript

Postat: 29 mar 2010, 10:06
av linusj87
Det var det jag misstänkte.

Går det inte att via ett script kolla flera sidor samtidigt eller på något annat sätt öka farten?

Re: bashscript

Postat: 29 mar 2010, 10:17
av mcNisse
Det är möjligt... och mycket troligt att du behöver göra för att ens komma upp i 3 sidor/s. Men du kan inte lasta på hur mycket som helst. Då blir det en DoS attack av ditt skript ;)

Re: bashscript

Postat: 29 mar 2010, 10:25
av dmz
Är det något sådant här du menar? Du får ändra regexet själv eftersom du inte berättade vad det ska vara för extension.

Kod: Markera allt

use strict;
use WWW::Mechanize;

my $m = WWW::Mechanize->new;
$m->agent_alias('Windows Mozilla');
if(!@ARGV) {
  print 'Give me uris', "\n";
}

my @urls = @ARGV;

sub fetch {
  my @urls = (@_);
  foreach my $url(@urls) {
    $m->get($url) or warn 'DEAD!';
  }
  foreach my $grabbed($m->links) {
    if($grabbed->url_abs =~ m/.*/ix) {
      print $grabbed->url_abs, "\n"
    }
  }
}
&fetch(@urls);
Då kan du använda det i stil med;

Kod: Markera allt

perl foo.pl http://foo.bar/page{1..30}
(osäker på om {1..30} fungerar i bash... någon?)

Re: bashscript

Postat: 02 apr 2010, 13:35
av dmz
Denna lär vara ännu simplare att använda för just ditt syfte http://search.cpan.org/~abeltje/WWW-Che ... eckSite.pm

Re: bashscript

Postat: 02 apr 2010, 15:14
av Rune.K
Försöker du köra 100000000 anrop till sunet.se rakt av, så lär deras brandvägg reagera och ditt IP blir bannat.