如何查找网站上的所有链接/页面

时间:2009-09-17 14:43:10

标签: directory web-crawler

是否可以在任何给定的网站上找到所有页面和链接?我想输入一个URL,并从该网站生成所有链接的目录树?

我看过HTTrack,但下载了整个网站,我只需要目录树。

5 个答案:

答案 0 :(得分:62)

结帐linkchecker - 它会抓取网站(同时遵守robots.txt)并生成报告。从那里,您可以编写用于创建目录树的解决方案。

答案 1 :(得分:31)

如果您的浏览器中有开发人员控制台(JavaScript),则可以在以下位置输入以下代码:

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

缩短:

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

答案 2 :(得分:2)

另一种选择可能是

Array.from(document.querySelectorAll("a")).map(x => x.href)

$$(更短

Array.from($$("a")).map(x => x.href)

答案 3 :(得分:0)

如果这是一个编程问题,那么我建议你编写自己的正则表达式来解析所有检索到的内容。目标标签是标准HTML的IMG和A.对于JAVA,

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

这与Pattern和Matcher类一起应该检测标签的开头。如果您还想要CSS,请添加LINK标记。

但是,它并不像你原先想象的那么容易。许多网页格式不正确。如果你需要考虑所有不规则的表达,那么以编程方式提取人类可以“识别”的所有链接真的很困难。

祝你好运!

答案 4 :(得分:-2)

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