Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah cara saya membina perangkak PHP mudah untuk mengekstrak pautan dan kandungan daripada tapak web?

Bagaimanakah cara saya membina perangkak PHP mudah untuk mengekstrak pautan dan kandungan daripada tapak web?

Linda Hamilton
Linda Hamiltonasal
2024-11-07 19:04:02926semak imbas

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

Mencipta Perangkak PHP Mudah

Merangkak tapak web dan mengekstrak data ialah tugas biasa dalam pengaturcaraan web. PHP menyediakan rangka kerja yang fleksibel untuk membina perangkak, membolehkan anda mengakses dan mendapatkan maklumat daripada halaman web jauh.

Untuk mencipta perangkak PHP mudah yang mengumpul pautan dan kandungan daripada halaman web tertentu, anda boleh menggunakan pendekatan berikut :

Menggunakan Penghurai 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);
?>

Perangkak ini menggunakan penghurai DOM untuk menavigasi melalui HTML halaman web, mengenal pasti semua teg sauh dan mengikut sebarang pautan mereka mengandungi. Ia mengumpul kandungan halaman yang dipautkan dan membuangnya ke dalam output standard. Anda boleh mengubah hala output ini ke fail teks untuk menyimpan data yang dikumpul secara setempat.

Ciri Tambahan:

  • Menghalang merangkak URL yang sama beberapa kali.
  • Mengendalikan URL relatif dengan betul.
  • Menyokong HTTPS, pengesahan pengguna dan nombor port apabila menggunakan sambungan http PECL.

Atas ialah kandungan terperinci Bagaimanakah cara saya membina perangkak PHP mudah untuk mengekstrak pautan dan kandungan daripada tapak web?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn