Czy można znaleźć wszystkie strony i linki na DOWOLNEJ witrynie? Chciałbym wprowadzić adres URL i utworzyć drzewo katalogowe wszystkich linków z tej witryny?
Patrzyłem na HTTrack, ale to pobiera całą witrynę i po prostu potrzebuję drzewa katalogów.
Czy można znaleźć wszystkie strony i linki na DOWOLNEJ witrynie? Chciałbym wprowadzić adres URL i utworzyć drzewo katalogowe wszystkich linków z tej witryny?
Patrzyłem na HTTrack, ale to pobiera całą witrynę i po prostu potrzebuję drzewa katalogów.
Odpowiedzi:
Sprawdź linkchecker - zaindeksuje witrynę (przestrzegając robots.txt
) i wygeneruje raport. Stamtąd możesz utworzyć skrypt rozwiązania do tworzenia drzewa katalogów.
robots.txt
pliku, oznacza to tylko, że możesz czołgać się do syta.
Jeśli masz w przeglądarce konsolę programisty (JavaScript), możesz wpisać ten kod w:
urls = document.querySelectorAll('a'); for (url in urls) console.log(urls[url].href);
Skrócony:
n=$$('a');for(u in n)console.log(n[u].href)
$$
operator? A może to po prostu dowolna nazwa funkcji, tak samo jak n=ABC(''a');
nie rozumiem, w jaki sposób urls
pobiera się wszystkie elementy oznaczone tagiem „a”. Możesz wytłumaczyć? Zakładam, że to nie jest jQuery. O jakiej funkcji biblioteki prototypów mówimy?
$$()
jest skrótem od document.querySelectorAll()
. Więcej informacji pod tym linkiem: developer.mozilla.org/en-US/docs/Web/API/Document/…
Inną alternatywą może być
Array.from(document.querySelectorAll("a")).map(x => x.href)
Z twoim $$(
jest jeszcze krótszy
Array.from($$("a")).map(x => x.href)
Jeśli jest to pytanie programistyczne, sugerowałbym napisanie własnego wyrażenia regularnego, aby przeanalizować całą pobraną zawartość. Tagi docelowe to IMG i A dla standardowego HTML. W przypadku JAVA
final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)";
to wraz z klasami Pattern i Matcher powinno wykryć początek tagów. Dodaj tag LINK, jeśli chcesz również CSS.
Jednak nie jest to tak łatwe, jak mogłoby się wydawać. Wiele stron internetowych nie jest poprawnie sformułowanych. Wyodrębnienie wszystkich linków programowo, które człowiek może „rozpoznać”, jest naprawdę trudne, jeśli trzeba wziąć pod uwagę wszystkie nieregularne wyrażenia.
Powodzenia!
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;
}
wypróbuj ten kod ....