ウェブサイト上のすべてのリンク/ページを見つける方法


98

特定のウェブサイトのすべてのページとリンクを見つけることは可能ですか?URLを入力して、そのサイトからのすべてのリンクのディレクトリツリーを作成しますか?

私はHTTrackを見てきましたが、サイト全体をダウンロードするので、ディレクトリツリーが必要です。


2
crawlmysite.in-サイトは存在しません
Sarah Trees

回答:


70

linkcheckerをチェックしてください —サイトをクロールし(に従いますrobots.txt)、レポートを生成します。そこから、ディレクトリツリーを作成するためのソリューションをスクリプト化できます。


どうもありがとうハンク!完璧-まさに私が必要としたもの。非常に高く評価。
ジョナサンリヨン

2
素晴らしいツールです。「以前XENUリンクスルース」を使っていました。リンクチェッカーははるかに冗長です。
Mateng

どうすれば自分でできるの?Webサイトにrobots.txtがない場合はどうなりますか?
アランコロマノ2013

1
@MariusKavansky Webサイトを手動でクロールするにはどうすればよいですか。または、クローラーをどのように構築しますか?私はあなたの質問を理解しているのかわかりません。robots.txtファイルがない場合、それはあなたが心ゆくまでクロールできることを意味します。
ハンクゲイ

8
こんにちは、リンクチェッカーは私がサイトをスキャンしたときに私のために働いていませんでした、それは壊れたリンクのレポートを返すだけです。非常に小さなレポート。数千のリンクをチェックしましたが、それらがどこに報告されているのかわかりません。バージョン9.3を使用してお手伝いできますか?
JayPex 2015年

43

ブラウザーに開発者コンソール(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)

1
「Javascriptで編集された」URLはどうですか?
ペーチェリエ2015

どのような?どういう意味ですか?
ElectroBit、2015

2
私はJavaScriptを使用して行われたリンクを意味します。あなたの解決策はそれを示さないでしょう。
Pacerier、2015

2
@ElectroBit本当に気に入っていますが、何を見ているのかわかりません。$$オペレーターとは?または、任意の関数名n=ABC(''a'); です。これurlsは、すべての「a」タグ付き要素を取得する方法を理解していないのと同じです。説明できますか?私はそのjQueryではないと仮定しています。どのプロトタイプライブラリ関数について話しているのですか?
zipzit

1
@zipzit一部のブラウザで$$()は、は基本的にの省略形ですdocument.querySelectorAll()。:このリンクではより多くの情報developer.mozilla.org/en-US/docs/Web/API/Document/...
ElectroBit

1

別の選択肢は

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

あなたの$$(さらに短い

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

プラス1-最新のJSを使用しているようなもの。このプログラムを実行したところ、いくつかのリンクが返されましたが、トップレベルにあるすべての.htmlページが返されませんでした。すべてのページが配列リストに返されない理由はありますか?ありがとう
Chris22

0

これがプログラミングの質問である場合は、取得したすべてのコンテンツを解析するための独自の正規表現を作成することをお勧めします。ターゲットタグは、IMGと標準HTMLのAです。JAVAの場合、

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

これは、PatternクラスおよびMatcherクラスとともに、タグの開始を検出する必要があります。CSSも必要な場合は、LINKタグを追加します。

ただし、最初に考えたほど簡単ではありません。多くのウェブページは整形式ではありません。すべての不規則な表現を考慮する必要がある場合、人間が「認識」できるすべてのリンクをプログラムで抽出することは非常に困難です。

幸運を!


18
いいえ、いいえ、いいえ、正規表現HTMLを解析しないでください。赤ちゃんのイエスを泣かせます!
dimo414 2013年

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

このコードを試してください...


10
この答えはおそらく正しいと便利ですが、問題の解決にどのように役立つかを説明するためにいくつかの説明を含めることが推奨されます。これは、機能が停止する原因となる変更(おそらく無関係)があり、ユーザーがいったんそれがどのように機能したかを理解する必要がある場合、将来的に特に役立ちます。
Kevin Brown

2
えっと、少し長いです。
ElectroBit

1
PHPでこの方法でHTMLを解析する必要はまったくありません。php.net/manual/en/class.domdocument.php PHPには、DOMを理解する機能があります。
JamesH
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.