주어진 웹 사이트에서 모든 페이지와 링크를 찾을 수 있습니까? 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;
}
이 코드를 시도하십시오 ….