Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah saya boleh membina perangkak PHP yang teguh menggunakan manipulasi DOM untuk mengekstrak data daripada halaman web dengan berbilang pautan?

Bagaimanakah saya boleh membina perangkak PHP yang teguh menggunakan manipulasi DOM untuk mengekstrak data daripada halaman web dengan berbilang pautan?

Mary-Kate Olsen
Lepaskan: 2024-11-08 07:11:01
asal
974 orang telah melayarinya

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

Merangkak dengan PHP: Panduan Komprehensif

Untuk mengekstrak data daripada halaman web yang mengandungi beberapa pautan, PHP menawarkan pelbagai kemungkinan. Satu pendekatan melibatkan penggunaan ungkapan biasa, tetapi adalah penting untuk mengelak bergantung semata-mata padanya untuk penghuraian HTML.

Pelaksanaan Crawler Berasaskan DOM

Perangkak berasaskan DOM Tatu menyediakan alternatif yang boleh dipercayai. Berikut ialah versi yang dipertingkatkan:

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;
}
Salin selepas log masuk

Versi yang dipertingkatkan ini merangkumi pelbagai senario url, termasuk https, pengguna, pas dan port.

Penambahan

George menunjukkan pepijat dalam versi asal, yang sebaliknya menambahkan url relatif pada penghujung laluan url daripada menimpanya. Akibatnya, isu ini telah ditangani, memastikan url relatif berkelakuan seperti yang diharapkan.

Menyimpan Output

Versi perangkak yang diubah suai menggemakan outputnya kepada STDOUT, membolehkan anda untuk mengubah halanya dengan mudah ke fail pilihan anda.

Dengan memasukkan ini penambahbaikan, perangkak berasaskan DOM ini menyediakan penyelesaian yang mantap untuk mengekstrak data daripada halaman web dengan berbilang pautan dalam PHP.

Atas ialah kandungan terperinci Bagaimanakah saya boleh membina perangkak PHP yang teguh menggunakan manipulasi DOM untuk mengekstrak data daripada halaman web dengan berbilang pautan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan