>백엔드 개발 >PHP 튜토리얼 >여러 링크가 있는 웹 페이지에서 데이터를 추출하기 위해 DOM 조작을 사용하여 강력한 PHP 크롤러를 어떻게 구축할 수 있습니까?

여러 링크가 있는 웹 페이지에서 데이터를 추출하기 위해 DOM 조작을 사용하여 강력한 PHP 크롤러를 어떻게 구축할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-08 07:11:011042검색

How can I build a robust PHP crawler using DOM manipulation for extracting data from web pages with multiple links?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.