Forum » Programiranje » Link::EXTOR
Link::EXTOR
poweroff ::
Mogoce bo kdo vedel kje ga lomim, ali pa ce me vsaj lahko usmeri na kaksen tuj forum kjer bi vprasal...
Imam datoteko z okrog 100 URLji. Rad bi napisal program v perlu, ki datoteko odpre in za vsak URL preveri:
- ali obstaja
- kaksen je title
- koliko slik je vkljucenih
- kateri linki so notri.
Skratka - odpre file in vsak URL je v svoji vrstici.
Izgledalo naj bi nekako takole:
use HTML::LinkExtor;
use LWP::Simple;
use LWP;
use LWP::UserAgent;
use URI::URL;
@URLS = ("$base_url");
$browser = LWP::UserAgent->new();
$browser->agent("superbrows/juhuhu");
$webdoc = $browser->request(HTTP::Request->new(GET => $page));
foreach $url (@URLS) {
$webdoc = $browser->request(HTTP::Request->new(GET => $url));
if ($webdoc->is_success) {
my @images = $webdoc->content =~ m{
< \s* img
\s* src
\s* =
\s* ["|']? ( [^\s > '"]+ ) ['|"]?
}xgm;
$num_img=@images;
print -::-$url-::-", $webdoc->title, "-::-", $webdoc->content_type, "-::-", $webdoc->base, "-::-$num_img-::-LINKI:-";
Tole naj bi sedaj prebralo linke. Ce sem dal $base_url = $vrstica_fajla, sploh ni hotelo delat, takole pa sicer dela, vendar...(glej spodaj)
$base_url = $webdoc->base; #preveri bazni url!
$parser = HTML::LinkExtor->new(undef, $base_url);
$parser->parse(get($base_url))->eof;
tukaj extracta linke v array
@links = $parser->links;
foreach $linkarray (@links) {
my @element = @$linkarray;
my $elt_type = shift @element;
while (@element) {
my ($attr_name , $attr_value) = splice(@element, 0, 2);
$seen{$attr_value}++;
}
}
$i = 0;
for (sort keys %seen) {
$arr[$i] = $_;
$i++;
}
izpise array z linki
print "@arr\n";
}
else {
print "URL $url ne obstaja!";
}
}
Skratka... Ko zadevo pozenem mi linkov ne izpise pravilno. Pri prvem URLju mi linke izpise OK, potem pa jih samo ponavlja. Vcasih pa namesto linkov izpise neke cudne znake, ki vsebujejo besedo CSID...
Po drugi strani pa sem ugotovil, da če isti program napišem tako da nekdo vtipka URL v web formo, potem vse dela. Tudi ce dam $base_url = $vtipkana_vrstica.
Ne vem ali sem kaj spregledal ali pa sem tako glup...
Imam datoteko z okrog 100 URLji. Rad bi napisal program v perlu, ki datoteko odpre in za vsak URL preveri:
- ali obstaja
- kaksen je title
- koliko slik je vkljucenih
- kateri linki so notri.
Skratka - odpre file in vsak URL je v svoji vrstici.
Izgledalo naj bi nekako takole:
use HTML::LinkExtor;
use LWP::Simple;
use LWP;
use LWP::UserAgent;
use URI::URL;
@URLS = ("$base_url");
$browser = LWP::UserAgent->new();
$browser->agent("superbrows/juhuhu");
$webdoc = $browser->request(HTTP::Request->new(GET => $page));
foreach $url (@URLS) {
$webdoc = $browser->request(HTTP::Request->new(GET => $url));
if ($webdoc->is_success) {
my @images = $webdoc->content =~ m{
< \s* img
\s* src
\s* =
\s* ["|']? ( [^\s > '"]+ ) ['|"]?
}xgm;
$num_img=@images;
print -::-$url-::-", $webdoc->title, "-::-", $webdoc->content_type, "-::-", $webdoc->base, "-::-$num_img-::-LINKI:-";
Tole naj bi sedaj prebralo linke. Ce sem dal $base_url = $vrstica_fajla, sploh ni hotelo delat, takole pa sicer dela, vendar...(glej spodaj)
$base_url = $webdoc->base; #preveri bazni url!
$parser = HTML::LinkExtor->new(undef, $base_url);
$parser->parse(get($base_url))->eof;
tukaj extracta linke v array
@links = $parser->links;
foreach $linkarray (@links) {
my @element = @$linkarray;
my $elt_type = shift @element;
while (@element) {
my ($attr_name , $attr_value) = splice(@element, 0, 2);
$seen{$attr_value}++;
}
}
$i = 0;
for (sort keys %seen) {
$arr[$i] = $_;
$i++;
}
izpise array z linki
print "@arr\n";
}
else {
print "URL $url ne obstaja!";
}
}
Skratka... Ko zadevo pozenem mi linkov ne izpise pravilno. Pri prvem URLju mi linke izpise OK, potem pa jih samo ponavlja. Vcasih pa namesto linkov izpise neke cudne znake, ki vsebujejo besedo CSID...
Po drugi strani pa sem ugotovil, da če isti program napišem tako da nekdo vtipka URL v web formo, potem vse dela. Tudi ce dam $base_url = $vtipkana_vrstica.
Ne vem ali sem kaj spregledal ali pa sem tako glup...
simon ::
Samo nekaj opazk:
Pri print -::-$url-::-", ti manjka spredaj narekovaj, mogoce ga je forum odrezal. Na koncu manjkata dva zavita oklepaja (konec foreach in if).
Ce hoces steti slike moras upostevati, da lahko napises img border= src=, torej so lahko parametri v razlicnem vrstnem redu (nekateri editorji jih napisejo tako ) poleg tega daj m operatorju se i stikalo (xgmi) ker ni nujno da bo napisano z malo (i ignorira velikost crk).
si poiskusil s chomp?
Pri print -::-$url-::-", ti manjka spredaj narekovaj, mogoce ga je forum odrezal. Na koncu manjkata dva zavita oklepaja (konec foreach in if).
Ce hoces steti slike moras upostevati, da lahko napises img border= src=, torej so lahko parametri v razlicnem vrstnem redu (nekateri editorji jih napisejo tako ) poleg tega daj m operatorju se i stikalo (xgmi) ker ni nujno da bo napisano z malo (i ignorira velikost crk).
si poiskusil s chomp?
poweroff ::
Ja, tisto je forum odrezal...
Glede img - imas prav, bo mogoce dovolj ce samo img countam...
S chomp sem pa probal pa se nic ne zgodi. Tudi chop mi ne odreze zadnjega znaka...
BTW: mogoce sem zaj** sintaxso za chomp, kako bi chompal spremenljivko $base_url?
Glede img - imas prav, bo mogoce dovolj ce samo img countam...
S chomp sem pa probal pa se nic ne zgodi. Tudi chop mi ne odreze zadnjega znaka...
BTW: mogoce sem zaj** sintaxso za chomp, kako bi chompal spremenljivko $base_url?
simon ::
chomp ($spremenljivka)
mogoce imas url-je napisane v datoteki kjer je konec vrstice dosovski (CR\LF)?
mogoce imas url-je napisane v datoteki kjer je konec vrstice dosovski (CR\LF)?
simon ::
Nastavit moras posebno spremenljivko $/ ki je na unixu $/="\n" torej znak za konec vrstice na $/="\r\n" (dosovski konec vrstice). tako ti bo chomp potem rezal konec datotek, ne pozabi pa jo potem setirati nazaj na $/="\n" da ti bojo delale ostale zadeve.
Priporocam pa ti da si nabavis editor ki zna shranjevati v unix formatu ali pa ce prenasas zadeve preko ftp-ja nastavis transfer na ascii.
Priporocam pa ti da si nabavis editor ki zna shranjevati v unix formatu ali pa ce prenasas zadeve preko ftp-ja nastavis transfer na ascii.
poweroff ::
Super, hvala! Sem probal ce shranim v TextPAdu pod Unix nacin, pa dela. Ampak Link::Extor pa se vedno noce delat.. imam obcutek da bi ga bilo vmes treba nekako inicializirat...
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [JAVA] HTTPS clientOddelek: Programiranje | 3170 (1900) | peterv6i |
» | php array sortiranjeOddelek: Izdelava spletišč | 1183 (906) | Mesar |
» | izpisovanje datotek in sortiranjeOddelek: Programiranje | 786 (608) | cobrica |
» | php skripta za registracijo uporabnikovOddelek: Izdelava spletišč | 2086 (1667) | skorpio |
» | .PL ne dela pa ne dela!Oddelek: Programiranje | 1276 (1179) | JeDo |