Чи можна знайти всі сторінки та посилання на БУДЬ-ЯКОМУ веб-сайті? Я хотів би ввести 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;
}
спробуйте цей код ....