PHP를 사용한 크롤링: 종합 가이드
여러 링크가 포함된 웹 페이지에서 데이터를 추출하기 위해 PHP는 다양한 가능성을 제공합니다. 한 가지 접근 방식은 정규 표현식을 활용하는 것이지만 HTML 구문 분석을 위해 정규 표현식에만 의존하는 것을 피하는 것이 중요합니다.
DOM 기반 크롤러 구현
Tatu의 DOM 기반 크롤러는 다음을 제공합니다. 믿을 수 있는 대안. 향상된 버전은 다음과 같습니다.
function crawl_page($url, $depth = 5) { static $seen = array(); if (isset($seen[$url]) || $depth === 0) { return; } $seen[$url] = true; $dom = new DOMDocument('1.0'); @$dom->loadHTMLFile($url); $anchors = $dom->getElementsByTagName('a'); foreach ($anchors as $element) { $path = $element->getAttribute('href'); if (0 !== strpos($path, 'http')) { $path = '/' . ltrim($path, '/'); if (extension_loaded('http')) { $href = http_build_url($url, array('path' => $path)); } else { $parts = parse_url($url); $href = $parts['scheme'] . '://'; if (isset($parts['user']) && isset($parts['pass'])) { $href .= $parts['user'] . ':' . $parts['pass'] . '@'; } $href .= $parts['host']; if (isset($parts['port'])) { $href .= ':' . $parts['port']; } $href .= dirname($parts['path'], 1).$path; } } crawl_page($href, $depth - 1); } echo "URL:", $url, PHP_EOL, "CONTENT:", PHP_EOL, $dom->saveHTML(), PHP_EOL, PHP_EOL; }
이 향상된 버전은 https, 사용자, 패스 및 포트를 포함한 다양한 URL 시나리오를 설명합니다.
향상된 내용
George는 URL 경로를 덮어쓰는 대신 상대 URL을 URL 경로 끝에 추가하는 원본 버전의 버그를 지적했습니다. 결과적으로 이 문제는 해결되어 상대 URL이 예상대로 작동합니다.
출력 저장
수정된 버전의 크롤러는 출력을 STDOUT에 반영하므로 원하는 파일로 편리하게 리디렉션할 수 있습니다.
이러한 향상된 기능을 통합함으로써 이 DOM 기반 크롤러는 PHP의 여러 링크가 있는 웹페이지에서 데이터를 추출하기 위한 강력한 솔루션을 제공합니다.
위 내용은 여러 링크가 있는 웹 페이지에서 데이터를 추출하기 위해 DOM 조작을 사용하여 강력한 PHP 크롤러를 어떻게 구축할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!