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


98

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

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


2
crawlmysite.in - 사이트는없는 존재
사라 나무에게

답변:


70

linkchecker를 확인하십시오 . 사이트를 크롤링하고 (를 준수하는 동안 robots.txt) 보고서를 생성합니다. 여기에서 디렉토리 트리를 만들기위한 솔루션을 스크립팅 할 수 있습니다.


행크 감사합니다! 완벽합니다-정확히 내가 필요한 것입니다. 대단히 감사합니다.
Jonathan Lyon

2
좋은 도구입니다. 나는 "XENU link sleuth before"를 사용하고있었습니다. Linkchecker는 훨씬 더 장황합니다.
Mateng 2011

내가 어떻게 하죠? 웹 사이트에 robots.txt가 없으면 어떻게됩니까?
Alan Coromano 2013

1
@MariusKavansky 웹 사이트를 수동으로 크롤링하는 방법은 무엇입니까? 아니면 크롤러를 어떻게 구축합니까? 질문을 이해했는지 잘 모르겠습니다. robots.txt파일 이 없으면 마음껏 크롤링 할 수 있습니다.
Hank Gay

8
안녕하세요, linkchecker는 사이트를 스캔 할 때 작동하지 않았으며 깨진 링크에 대한 보고서 만 반환합니다. 아주 작은 보고서. 그들은 수천 개의 링크를 확인했지만 어디에서보고되었는지 볼 수 없습니다. 버전 9.3을 사용하여 도와 주시겠습니까?
JayPex 2015

43

브라우저에 개발자 콘솔 (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)

1
"Javascript-ed"URL은 어떻습니까?
Pacerier

무엇처럼? 무슨 말이야?
ElectroBit 2015

2
Javascript를 사용하여 완료된 링크를 의미합니다. 귀하의 솔루션은 그것을 보여주지 않을 것입니다.
Pacerier 2015

2
@ElectroBit 나는 그것을 정말로 좋아하지만 내가 뭘보고 있는지 확실하지 않습니까? $$운영자 는 무엇입니까 ? 또는 모든 'a'태그 요소를 얻는 방법을 이해하지 못하는 것과 같은 임의의 함수 이름 입니다. 설명 할 수 있습니까? 나는 jQuery가 아니라고 가정하고 있습니다. 우리가 말하는 프로토 타입 라이브러리 기능은 무엇입니까? n=ABC(''a');urls
zipzit

1
@zipzit 소수의 브라우저에서 $$()기본적으로 document.querySelectorAll(). 이 링크에서 더 많은 정보 : developer.mozilla.org/en-US/docs/Web/API/Document/…
ElectroBit

1

또 다른 대안은

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

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

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

플러스 1-현대 JS를 사용하는 것과 같습니다. 이 프로그램을 실행했는데 몇 개의 링크를 반환했지만 최상위 수준에있는 모든 .html 페이지를 반환하지는 않았습니다. 모든 페이지가 배열 목록에 반환되지 않는 이유가 있습니까? 감사합니다
Chris22

0

이것이 프로그래밍 질문 인 경우 검색된 모든 내용을 구문 분석하는 고유 한 정규식을 작성하는 것이 좋습니다. 대상 태그는 표준 HTML의 경우 IMG 및 A입니다. JAVA의 경우

final String openingTags = "(<a [^>]*href=['\"]?|<img[^> ]* src=['\"]?)";

이것은 Pattern 및 Matcher 클래스와 함께 태그의 시작을 감지해야합니다. CSS도 원한다면 LINK 태그를 추가하세요.

그러나 처음에 생각했던 것만 큼 쉽지는 않습니다. 많은 웹 페이지가 제대로 구성되지 않았습니다. 모든 불규칙한 표현을 고려해야한다면 인간이 "인식"할 수있는 모든 링크를 프로그래밍 방식으로 추출하는 것은 정말 어렵습니다.

행운을 빕니다!


18
아니요 아니요 아니요, 정규식으로 HTML을 구문 분석하지 마십시오. 아기 예수가 울게됩니다!
dimo414 2013 년

-2
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;
}

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


10
이 답변은 정확하고 유용 할 수 있지만 문제 해결에 도움이되는 방법을 설명하기 위해 몇 가지 설명을 함께 포함하는 것이 좋습니다. 이것은 작동을 멈추게하는 변경 (아마도 관련이없는)이 있고 사용자가 한 번 작동 한 방식을 이해해야하는 경우에 특히 유용합니다.
Kevin Brown

2
어, 좀 깁니다.
ElectroBit 2015 년

1
php에서 이런 방식으로 html을 구문 분석하는 것은 완전히 불필요합니다. php.net/manual/en/class.domdocument.php PHP는 DOM을 이해할 수있는 능력을 가지고 있습니다!
JamesH 2015-06-26
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.