特定のウェブサイトのすべてのページとリンクを見つけることは可能ですか?URLを入力して、そのサイトからのすべてのリンクのディレクトリツリーを作成しますか?
私はHTTrackを見てきましたが、サイト全体をダウンロードするので、ディレクトリツリーが必要です。
回答:
linkcheckerをチェックしてください —サイトをクロールし(に従いますrobots.txt
)、レポートを生成します。そこから、ディレクトリツリーを作成するためのソリューションをスクリプト化できます。
robots.txt
ファイルがない場合、それはあなたが心ゆくまでクロールできることを意味します。
ブラウザーに開発者コンソール(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)
$$()
は、は基本的にの省略形ですdocument.querySelectorAll()
。:このリンクではより多くの情報developer.mozilla.org/en-US/docs/Web/API/Document/...
これがプログラミングの質問である場合は、取得したすべてのコンテンツを解析するための独自の正規表現を作成することをお勧めします。ターゲットタグは、IMGと標準HTMLの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;
}
このコードを試してください...