Можно ли найти все страницы и ссылки на ЛЮБОМ сайте? Я хочу ввести URL-адрес и создать дерево каталогов всех ссылок с этого сайта?
Я посмотрел на HTTrack, но он загружает весь сайт, и мне просто нужно дерево каталогов.
Можно ли найти все страницы и ссылки на ЛЮБОМ сайте? Я хочу ввести 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)
$$
оператор? Или это просто произвольное имя функции, так же как n=ABC(''a');
я не понимаю, как urls
получить все элементы с тегами 'a'. Вы можете объяснить? Я предполагаю, что это не jQuery. О какой функции библиотеки прототипов идет речь?
$$()
это сокращение от document.querySelectorAll()
. Больше информации по этой ссылке: developer.mozilla.org/en-US/docs/Web/API/Document/…
Другой альтернативой может быть
Array.from(document.querySelectorAll("a")).map(x => x.href)
С твоим $$(
еще короче
Array.from($$("a")).map(x => x.href)
Если это вопрос программирования, я бы посоветовал вам написать собственное регулярное выражение для анализа всего извлеченного содержимого. Целевые теги - это IMG и A для стандартного HTML. Для JAVA,
final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)";
это вместе с классами Pattern и Matcher должно определять начало тегов. Добавьте тег LINK, если вам также нужен CSS.
Однако это не так просто, как вы могли подумать. Многие веб-страницы имеют неправильный формат. Программно извлекать все ссылки, которые человек может «распознать», действительно сложно, если вам нужно принять во внимание все нерегулярные выражения.
Удачи!
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;
}
попробуйте этот код ....