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

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

我已经查看了 HTTrack,但它可以下载整个站点,我只需要目录树。

525961 次浏览

查看 链接检查器ー它将抓取站点(同时遵守 robots.txt)并生成一个报告。从那里,您可以编写创建目录树的解决方案脚本。

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

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

这一点连同 Pattern 和 Matcher 类应该能够检测到标记的开头。如果您还需要 CSS,请添加 LINK 标记。

然而,这并不像你最初想象的那么容易。许多网页格式不良。如果你需要考虑所有的不规则表达式,以编程方式提取人类能够“识别”的所有链接是非常困难的。

祝你好运!

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;
}

试试这个密码。

如果您的浏览器中有开发者控制台(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)

另一个选择可能是

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

你的 $$(更短

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