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

问题描述 投票:0回答:5

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

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

directory web-crawler
5个回答
91
投票

查看 linkchecker — 它将抓取网站(同时遵守

robots.txt
)并生成报告。从那里,您可以编写用于创建目录树的解决方案。


64
投票

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

6
投票

另一种选择可能是

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

有了你的

$$(
,它就更短了

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

或者更短

Array.from 不需要地图

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

[...$$("a")].map((x) => x.href)

$x('//a[@href!="#"]').map(({ href }) => href)

0
投票

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

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

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

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

祝你好运!


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

尝试这个代码......

© www.soinside.com 2019 - 2024. All rights reserved.