» »

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...:|

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?

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?

simon ::

chomp ($spremenljivka)
mogoce imas url-je napisane v datoteki kjer je konec vrstice dosovski (CR\LF)?

poweroff ::

Ja, to bo skoraj gotovo... A chomp tudi to odstrani?

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.

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 ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[JAVA] HTTPS client

Oddelek: Programiranje
173187 (1917) peterv6i
»

php array sortiranje

Oddelek: Izdelava spletišč
91199 (922) Mesar
»

izpisovanje datotek in sortiranje

Oddelek: Programiranje
6801 (623) cobrica
»

php skripta za registracijo uporabnikov

Oddelek: Izdelava spletišč
162102 (1683) skorpio
»

.PL ne dela pa ne dela!

Oddelek: Programiranje
51287 (1190) JeDo

Več podobnih tem