2009-09-17 9 views
68

Est-il possible de trouver toutes les pages et les liens sur un site donné? Je voudrais entrer une URL et produire une arborescence de tous les liens de ce site?Comment trouver tous les liens/pages sur un site Web

J'ai regardé HTTrack mais cela télécharge tout le site et j'ai simplement besoin de l'arborescence.

+2

crawlmysite.in - Site n'existe pas –

Répondre

56

Extraire linkchecker -il va explorer le site (tout en obéissant robots.txt) et générer un rapport. À partir de là, vous pouvez écrire une solution pour créer l'arborescence.

+0

merci beaucoup Hank! Parfait - exactement ce dont j'avais besoin. Très apprécié. –

+2

Un outil sympa. J'utilisais "XENU link sleuth avant". Linkchecker est beaucoup plus verbeux. – Mateng

+0

comment je fais ça moi-même? et s'il n'y a pas de robots.txt dans un site web? –

1

Si c'est une question de programmation, alors je vous suggère d'écrire votre propre expression régulière pour analyser tous les contenus récupérés. Les tags cibles sont IMG et A pour HTML standard. Pour JAVA,

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

Ceci avec les classes Pattern et Matcher devrait détecter le début des balises. Ajouter une balise LINK si vous voulez également CSS.

Cependant, ce n'est pas aussi simple que vous l'avez pensé. De nombreuses pages Web ne sont pas bien formées. Extraire tous les liens par programme que l'être humain peut "reconnaître" est vraiment difficile si vous avez besoin de prendre en compte toutes les expressions irrégulières.

Bonne chance!

+13

Non non non non, [ne pas analyser HTML avec regex] (http://stackoverflow.com/a/1732454/113632), cela fait pleurer bébé Jésus! – dimo414

24

Ou vous pouvez utiliser Google pour afficher toutes les pages qu'il a indexées pour ce domaine. Par exemple: site:www.bbc.co.uk

+5

mais si vous utilisez des fonctionnalités de recherche supplémentaires dans google tel que le site, intitle vous obtiendrez une restriction de 700 entrées. evenif en haut de la page de résultats dit un moyen loin de 700 ex: Environ 87300 résultats (0,73 secondes) – Mbarry

+1

@Mbarry, Et comment savez-vous cela? – Pacerier

+0

Il est facile d'apprendre à connaître. Essayez d'obtenir 30 - 50 pages de résultats de recherche à venir et vous trouverez bientôt la fin, au lieu de milliers de résultats sur "site: 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

Bien que cette réponse soit probablement correcte et utile, il est préférable d'inclure des explications pour expliquer comment elle aide à résoudre le problème.Cela devient particulièrement utile à l'avenir, s'il y a un changement (peut-être non apparenté) qui le fait cesser de fonctionner et les utilisateurs ont besoin de comprendre comment il a déjà fonctionné. –

+1

Eh, c'est un peu ** long. ** – ElectroBit

+1

Complètement inutile d'analyser le code HTML de cette manière en PHP. http://php.net/manual/fr/class.domdocument.php PHP a la capacité de comprendre le DOM! – JamesH

23

Si vous avez la console développeur (JavaScript) dans votre navigateur, vous pouvez saisir ce code dans:

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

Raccourcissement:

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

Qu'en est-il des urls "Javascript-ed"? – Pacerier

+0

Comme quoi? Que voulez-vous dire? – ElectroBit

+1

Je veux dire un lien fait en utilisant Javascript. Votre solution ne le montrerait pas. – Pacerier

Questions connexes