2009-09-17 16 views
68

Czy można znaleźć wszystkie strony i linki na DOWOLNEJ danej stronie internetowej? Chciałbym wprowadzić adres URL i utworzyć drzewo katalogów wszystkich linków z tej strony?Jak znaleźć wszystkie linki/strony na stronie internetowej

Sprawdziłem HTTrack, ale to pobiera całą witrynę i po prostu potrzebuję drzewa katalogów.

+2

crawlmysite.in - site nie istnieje –

Odpowiedz

56

Zapoznaj się z linkchecker - przebije witrynę (wykonując polecenie robots.txt) i wygeneruje raport. Stamtąd możesz utworzyć skrypt do rozwiązania do tworzenia drzewa katalogów.

+0

dziękuję bardzo Hank! Idealne - dokładnie to, czego potrzebowałem. Bardzo doceniane. –

+2

Ładne narzędzie. Używałem "Śledznika linków XENU przed". Linkchecker jest dużo bardziej gadatliwy. – Mateng

+0

jak mam to zrobić? a co jeśli w witrynie internetowej nie ma pliku robots.txt? –

1

Jeśli jest to pytanie programistyczne, sugeruję napisanie własnego wyrażenia regularnego w celu przeanalizowania wszystkich pobranych treści. Tagi docelowe to IMG i A dla standardowego HTML. W przypadku JAVA,

final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)"; 

to razem z klasami Pattern i Matcher powinny wykrywać początek tagów. Dodaj tag LINK, jeśli chcesz również CSS.

Nie jest to jednak tak łatwe, jak się mogło początkowo wydawać. Wiele stron internetowych nie jest dobrze uformowanych. Wydobywanie wszystkich linków programowo, które człowiek może "rozpoznać", jest naprawdę trudne, jeśli trzeba wziąć pod uwagę wszystkie nieregularne wyrażenia.

Powodzenia!

+13

Nie, nie nie nie, [nie parsuj HTML z regex] (http://stackoverflow.com/a/1732454/113632), to sprawia, że ​​płacze Dziecko! – dimo414

24

Lub możesz użyć Google, aby wyświetlić wszystkie strony, które zindeksował dla tej domeny. Na przykład: site:www.bbc.co.uk

+5

, ale jeśli korzystasz z dodatkowych funkcji wyszukiwania w google, takich jak strona, intitle dostaniesz ograniczenie 700 wpisów. evenif na górze strony wyników podaje sposób daleko od 700 np .: Około 87 300 wyników (0,73 s) – Mbarry

+1

@Mbarry, A skąd to wiesz? – Pacerier

+0

Łatwo jest się o tym dowiedzieć. Postaraj się uzyskać od 30 do 50 stron wyników wyszukiwania, a wkrótce znajdziesz ich koniec, zamiast tysięcy wyników na stronie: www.bbc.co.uk. – Zon

-1
function getalllinks($url){ 
$links = array(); 
if ($fp = fopen($url, 'r')) { 
$content = ''; 
while ($line = fread($fp, 1024)) { 
$content .= $line; 
} 
} 
$textLen = strlen($content); 
if ($textLen > 10){ 
$startPos = 0; 
$valid = true; 
while ($valid){ 
$spos = strpos($content,'<a ',$startPos); 
if ($spos < $startPos) $valid = false; 
$spos  = strpos($content,'href',$spos); 
$spos  = strpos($content,'"',$spos)+1; 
$epos  = strpos($content,'"',$spos); 
$startPos = $epos; 
$link = substr($content,$spos,$epos-$spos); 
if (strpos($link,'http://') !== false) $links[] = $link; 
} 
} 
return $links; 
} 
try this code.... 
+6

Chociaż ta odpowiedź jest prawdopodobnie poprawna i użyteczna, zaleca się, aby wraz z nią wyjaśnić, w jaki sposób pomaga rozwiązać problem.Staje się to szczególnie przydatne w przyszłości, jeśli nastąpi zmiana (prawdopodobnie niezwiązana ze sobą), która powoduje, że przestaje działać, a użytkownicy muszą zrozumieć, w jaki sposób działał. –

+1

Eh, to trochę ** długo. ** – ElectroBit

+1

Całkowicie niepotrzebne do parsowania html w ten sposób w php. http://php.net/manual/en/class.domdocument.php PHP ma możliwość zrozumienia DOM! – JamesH

23

Jeśli masz konsolę programisty (JavaScript) w przeglądarce, można wpisać ten kod:

urls = document.querySelectorAll('a'); for (url in urls) console.log(urls[url].href); 

Skrócona

n=$$('a');for(u in n)console.log(n[u].href) 
+0

Co z adresami URL "Javascript-ed"? – Pacerier

+0

Co? Co masz na myśli? – ElectroBit

+1

Mam na myśli łącze wykonane przy użyciu Javascript. Twoje rozwiązanie tego nie pokaże. – Pacerier

Powiązane problemy