Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: antaresin 07. 05. 2011, 19:33:52
-
Zdravím všechny.
Potřeboval bych pomoci. Mám několik html dokumentů ("zdrojové kody int. stránek") a potřebuji z nich vytáhnout všechny hypertextové odkazy.
Můžete mi pomoci jak na to? Napadlo mě třeba nějákým skriptem a přes sed,awk...nebo možná je nějáký online analyzátor, který to z toho vytáhne...nevím:(
ideální by bylo, kdyby to oštřilo i duplicity, ale to není až tak nutné...Velmi děkuji za pomoc!
-
To lze udělat několika způsoby. Např. pomocí hpricot knihovny v ruby:
% ruby -r rubygems -e 'require "hpricot"; doc=Hpricot(STDIN); doc.search("a|img") do |e| case e.name; when "a" : p e[:href] ; when "img" : p e[:src] ; end ; end;' < index.html
Vrací jak href, tak src pro img (to jen tak pro ukázku univerzálnosti). Unikáty můžete získat buď pomocí sort(1) a uniq(1) a nebo přímo v ruby tak, že URI dáte do pole a uděláte to samé .sort.uniq
-
cat stranky*.html | ./url_finder.pl
kde url_finder.pl:
#!/usr/bin/env perl
use strict;
use warnings;
my %URLS;
while(my $line = <STDIN>) {
while($line =~ m/((http|https|ftp):\/\/([a-zA-Z0-9\-\.])+(\.)([a-zA-Z0-9]){2,4}([a-zA-Z0-9\/+=%&_\.~?\-]*)*)/g) {
$URLS{$1} = ();
}
};
print join "\n", keys(%URLS);
print "\n";
osetruje aj duplicity... ale pre prilis velku stranku to zhavaruje (ak by bolo URL adries viac ako sa vojde zahashovanych do pamate...;)
-
cat stranky*.html | ./url_finder.pl
kde url_finder.pl:
....
Také lze, ale je třeba dávat pozor, protože ten skript nenajde reference, které nezačínají schématem (není povinný) a naopak najde URL, která jsou v textu a komentářích, ale nejedná se o odkazy. Pro specifické stránky by to mohlo ale stačit. Jinak je jediná možnost a to sestavení stromu.
-
Dobra poznamka, samozrejme sa da upravit regexp, aby to osetrovalo aj tie prislusne situacie (vyzadovat href/src pred URL a ak URL nezacina schematem, doplnit pred nu aktualnu URL, z ktorej ulozena stranka pochadza (ktora zrejme musi byt specifikovana ako parameter, ak pri ukladani nie je ulozeny automaticky i komentar <!-- saved from url=...-->, ako to robi napr chrome))
-
Děkuji pánové,
hodně jsem se naučil a jak bude čas, vlétnu do toho více...Nakonec jsem na netu vydoloval tento skript v perlu a budu mít tu drzost, zeptat se vás ještě na jednu věc.
#!/usr/bin/perl
open SOUBOR, "index.html" or die "Nelze otevřít soubor. $!";
while (<SOUBOR>){
print "\<a href=\"$2\">$3\</a>\n" while $_ =~ /
<A\sHREF=
(["']) #uvozovky nebo apostrofy
([^\1]*?) #vše mimo uvozujícího znaku
\1 #koncová uvozovka nebo apostrof, podle toho, který znak uvozuje
>
([^<]*) #vše mezi <a href...> a <\/a>
<\/A>
/ixg;
}
Potřeboval bych, aby SOUBOR nebyl přímo index.html, ale aby si vzal např. všechny *.html soubory ve složce. Něco ve smyslu "předat mu výpis find *.html, nebo ls *.html"
-
Potřeboval bych, aby SOUBOR nebyl přímo index.html, ale aby si vzal např. všechny *.html soubory ve složce. Něco ve smyslu "předat mu výpis find *.html, nebo ls *.html"
obalte to:
foreach $filename (@ARGV) {
open SOUBOR, $filename ......
...
}
Pro zajímavost uvedu i ruby verzi:
require 'rubygems'
require 'hpricot'
ARGV.each do |filename|
Hpricot(filename).search("a") do |element|
puts element[:href] # tiskne pouze atribut href
puts element # tiskne kompletní tag včetně všech atributů a obsahu
end
end