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

Directory 如何查找网站上的所有链接/页面,directory,web-crawler,Directory,Web Crawler,是否有可能找到任何给定网站上的所有页面和链接?我想输入一个URL并生成该站点所有链接的目录树 我看过HTTrack,但它下载了整个站点,我只需要目录树。签出-它将对站点进行爬网(同时遵守robots.txt)并生成报告。从那里,您可以编写一个创建目录树的解决方案。如果这是一个编程问题,那么我建议您编写自己的正则表达式来解析所有检索到的内容。目标标记是IMG和一个用于标准HTML的标记。对于JAVA final String openingTags = "(<a [^>]*href=[

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


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

签出-它将对站点进行爬网(同时遵守
robots.txt
)并生成报告。从那里,您可以编写一个创建目录树的解决方案。

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

final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)";
final String openingTags=“(]*href=['\'”?”|
这与Pattern和Matcher类一起应该检测标记的开头。如果您还需要CSS,请添加链接标记

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

祝你好运!

函数getalllinks($url){
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;
}
$links=array(); 如果($fp=fopen($url,'r')){ $content=''; 而($line=fread($fp,1024)){ $content.=$line; } } $textLen=strlen($content); 如果($textLen>10){ $startPos=0; $valid=true; while($有效){
$spos=strpos($content,“如果浏览器中有开发人员控制台(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)

非常感谢汉克!完美-正是我所需要的。非常感谢。一个很好的工具。我以前用过“XENU链接侦探”.Linkchecker要详细得多。我自己怎么做?如果网站上没有robots.txt怎么办?@MariusKavansky你怎么手动抓取网站?或者你怎么建立一个抓取程序?我不确定我是否理解你的问题。如果没有
robots.txt
文件,那只意味着你可以抓取到你的心。嗨,伙计们,linkchec当我扫描网站时,ker没有为我工作,它只返回一个断开链接的报告。非常小的报告。虽然他们检查了数千个链接,但我看不到这些链接在哪里。使用9.3版,你能帮忙吗?不,不,不,它让小耶稣哭了!关于“Javascript ed”呢URL?比如什么?你是什么意思?我指的是使用Javascript完成的链接。你的解决方案不会显示它。@ElectroBit我真的很喜欢它,但我不确定我在看什么?什么是
$
操作符?或者这与
n=ABC('a')完全相同;
我不明白
URL
是如何获取所有带“a”标记的元素的。你能解释一下吗?我假设它不是jQuery。我们在谈论什么样的原型库函数?@zipzit在一些浏览器中,
$$()
基本上是
文档的缩写。querySelectorAll()
。此链接上的更多信息:虽然此答案可能是正确且有用的,但如果您在答案中包含一些解释,以解释它如何帮助解决问题,则建议您使用此答案。如果将来出现更改(可能不相关),此选项将特别有用这导致它停止工作,用户需要了解它曾经是如何工作的。呃,它有点长。完全不需要用php以这种方式解析html。php确实能够理解DOM!crawmysite.in-site not existsplus 1-就像您使用的是现代JS。我运行了这个程序,虽然它返回了一些链接,它没有返回顶层的所有.html页面。是否有原因导致所有页面都没有返回到数组列表中?谢谢