[directory] 웹 사이트에서 모든 링크 / 페이지를 찾는 방법

주어진 웹 사이트에서 모든 페이지와 링크를 찾을 수 있습니까? URL을 입력하고 해당 사이트의 모든 링크에 대한 디렉토리 트리를 만들고 싶습니다.

HTTrack을 살펴 봤지만 전체 사이트를 다운로드하고 디렉토리 트리가 필요합니다.



답변

linkchecker를 확인하십시오 . 사이트를 크롤링하고 (를 준수하는 동안 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)


답변

또 다른 대안은

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

당신의 $$(그 심지어 짧은

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


답변

이것이 프로그래밍 질문 인 경우 검색된 모든 내용을 구문 분석하는 고유 한 정규식을 작성하는 것이 좋습니다. 대상 태그는 표준 HTML의 경우 IMG 및 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;
}

이 코드를 시도하십시오 ….


답변