>  기사  >  백엔드 개발  >  웹사이트에서 링크와 콘텐츠를 추출하는 간단한 PHP 크롤러를 어떻게 구축합니까?

웹사이트에서 링크와 콘텐츠를 추출하는 간단한 PHP 크롤러를 어떻게 구축합니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-07 19:04:02823검색

How do I build a simple PHP crawler to extract links and content from a website?

간단한 PHP 크롤러 만들기

웹사이트를 크롤링하고 데이터를 추출하는 것은 웹 프로그래밍의 일반적인 작업입니다. PHP는 크롤러 구축을 위한 유연한 프레임워크를 제공하므로 원격 웹페이지에서 정보에 액세스하고 검색할 수 있습니다.

특정 웹페이지에서 링크와 콘텐츠를 수집하는 간단한 PHP 크롤러를 만들려면 다음 접근 방식을 활용할 수 있습니다. :

DOM 파서 사용:

<?php
function crawl_page($url, $depth = 5)
{
    // Prevent endless recursion and circular references
    static $seen = array();
    if (isset($seen[$url]) || $depth === 0) {
        return;
    }

    // Mark the URL as seen
    $seen[$url] = true;

    // Load the web page using DOM
    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile($url);

    // Iterate over all anchor tags (<a>)
    $anchors = $dom->getElementsByTagName('a');
    foreach ($anchors as $element) {
        $href = $element->getAttribute('href');

        // Convert relative URLs to absolute URLs
        if (0 !== strpos($href, 'http')) {
            $path = '/' . ltrim($href, '/');
            if (extension_loaded('http')) {
                $href = http_build_url($url, array('path' => $path));
            } else {
                $parts = parse_url($url);
                $href = $parts['scheme'] . '://';
                if (isset($parts['user']) &amp;&amp; isset($parts['pass'])) {
                    $href .= $parts['user'] . ':' . $parts['pass'] . '@';
                }
                $href .= $parts['host'];
                if (isset($parts['port'])) {
                    $href .= ':' . $parts['port'];
                }
                $href .= dirname($parts['path'], 1) . $path;
            }
        }

        // Recursively crawl the linked page
        crawl_page($href, $depth - 1);
    }

    // Output the crawled page's URL and content
    echo "URL: " . $url . PHP_EOL . "CONTENT: " . PHP_EOL . $dom->saveHTML() . PHP_EOL . PHP_EOL;
}
crawl_page("http://example.com", 2);
?>

이 크롤러는 DOM 파서를 사용하여 웹페이지의 HTML을 탐색하고 모든 앵커 태그를 식별하며 모든 링크를 따릅니다. 그들은 포함하고 있습니다. 링크된 페이지의 내용을 수집하여 표준 출력에 덤프합니다. 이 출력을 텍스트 파일로 리디렉션하여 수집된 데이터를 로컬에 저장할 수 있습니다.

추가 기능:

  • 동일한 URL을 여러 번 크롤링하는 것을 방지합니다.
  • 상대 URL을 올바르게 처리합니다.
  • http PECL 확장 사용 시 HTTPS, 사용자 인증 및 포트 번호를 지원합니다.

위 내용은 웹사이트에서 링크와 콘텐츠를 추출하는 간단한 PHP 크롤러를 어떻게 구축합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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