Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP dalam amalan: pembangunan program perangkak web yang cekap

PHP dalam amalan: pembangunan program perangkak web yang cekap

WBOY
WBOYasal
2023-06-13 20:19:381451semak imbas

Program perangkak web merujuk kepada program yang memperoleh dan menghuraikan maklumat secara automatik di Internet Ia juga merupakan salah satu alat penting untuk pengumpulan data dan pemprosesan maklumat. Dalam era Internet, data adalah aset yang sangat berharga, dan dapat dengan cepat dan tepat mendapatkan maklumat pada tapak web sasaran adalah sangat penting untuk perniagaan dan individu. Menggunakan perangkak web boleh mencapai matlamat ini dengan lebih cekap.

Sebagai bahasa pengaturcaraan yang cekap, ciri pengaturcaraan rangkaian PHP yang cemerlang dan perpustakaan sumber terbuka yang kaya menjadikannya bahasa yang sangat sesuai untuk membangunkan program perangkak web. Artikel ini akan memperkenalkan secara terperinci cara menggunakan PHP untuk membangunkan program perangkak web yang cekap.

1. Prinsip asas program perangkak

Prinsip kerja asas program perangkak web adalah untuk mendapatkan kod sumber halaman web melalui protokol rangkaian, kemudian menghuraikan maklumat mengikut peraturan tertentu, dan akhirnya menyimpan data yang diperlukan dalam pangkalan data atau lain-lain dalam fail. Proses umum adalah seperti berikut:

1 Hantar permintaan ke URL sasaran dan dapatkan kod sumber halaman web
2. Menghuraikan maklumat dalam kod sumber, seperti pautan, teks, gambar, dsb.
3. Simpan maklumat yang diperlukan ke pangkalan data atau fail lain
4 Ulang langkah di atas sehingga tugas merangkak selesai

Bahagian teras program perangkak ialah penghurai. tugasnya adalah untuk menghuraikan kod sumber halaman web yang diperoleh dan mengekstrak maklumat yang diperlukan. Penghuraian kod sumber halaman web biasanya dilaksanakan menggunakan ungkapan biasa atau fungsi penghuraian yang disediakan oleh rangka kerja. Ungkapan biasa lebih fleksibel untuk digunakan, tetapi kompleks dan mudah ralat menggunakan fungsi penghuraian yang disediakan oleh rangka kerja yang mudah digunakan, tetapi juga mempunyai had.

2. Pembangunan praktikal program perangkak web

Artikel ini mengambil pembangunan program perangkak web mudah sebagai contoh untuk memperkenalkan proses pembangunannya.

  1. Tentukan keperluan

Sebelum membangunkan program perangkak web, anda perlu terlebih dahulu menjelaskan tapak web sasaran yang hendak dirangkak dan maklumat yang hendak dirangkak. Artikel ini mengambil cadangan popular Sina News merangkak sebagai contoh. Keperluannya ialah: merangkak tajuk dan pautan yang disyorkan berita popular pada halaman utama Berita Sina dan simpannya dalam pangkalan data.

  1. Dapatkan kod sumber halaman web

Dalam PHP, anda boleh menggunakan perpustakaan fungsi curl untuk mendapatkan kod sumber halaman web. Kod berikut menunjukkan cara menggunakan perpustakaan fungsi curl untuk mendapatkan kod sumber halaman web halaman utama Sina News.

<?php

$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

?>

Kod di atas menggunakan perpustakaan fungsi curl untuk menghantar permintaan ke halaman utama Sina News dan mendapatkan kod sumber halaman webnya. Fungsi curl_setopt() menetapkan hasil yang dikembalikan sebagai rentetan selepas mendapatkan halaman dan secara automatik menetapkan Perujuk halaman web yang diminta.

  1. Menghuraikan maklumat

Selepas mendapatkan kod sumber halaman web, anda perlu menghuraikan maklumat di dalamnya untuk mengekstrak data yang diperlukan. Dalam PHP, ini boleh dicapai menggunakan ungkapan biasa atau fungsi penghuraian yang disediakan oleh rangka kerja. Kod di bawah menunjukkan cara mengekstrak tajuk berita dan pautan menggunakan kelas DOMDocument terbina dalam PHP.

<?php

$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    echo $title . ' ' . $link . PHP_EOL;
}

?>

Dalam kod di atas, //div[@class="blk12"]/h2/a ialah ungkapan XPath, digunakan untuk memilih semua elemen h2 di bawah elemen div dengan atribut kelas "blk12" a unsur. Program ini menggunakan gelung foreach untuk merentasi semua elemen yang diperoleh, dan mengendalikan kaedah nodeValue dan getAttribute() DOMNode untuk mendapatkan nilai atribut teks dan hrefnya.

  1. Menyimpan data

Selepas mendapatkan maklumat yang dirangkak, ia perlu disimpan dalam pangkalan data. Artikel ini menggunakan pangkalan data MySQL sebagai contoh. Kod di bawah menunjukkan cara menyimpan tajuk berita dan pautan yang dikikis ke dalam pangkalan data MySQL.

<?php

// 连接数据库
$host = 'localhost';
$user = 'root';
$password = 'root';
$database = 'test';
$charset = 'utf8mb4';
$dsn = "mysql:host={$host};dbname={$database};charset={$charset}";
$pdo = new PDO($dsn, $user, $password);

// 获取新浪新闻主页热门推荐新闻标题和链接
$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

// 插入数据库
$sql = "INSERT INTO news(title, link) VALUES(:title, :link)";
$stmt = $pdo->prepare($sql);

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    $stmt->bindParam(':title', $title);
    $stmt->bindParam(':link', $link);
    $stmt->execute();
}

?>

Dalam kod di atas, PDO digunakan untuk menyambung ke pangkalan data MySQL, dan jadual data bernama berita ditakrifkan untuk menyimpan tajuk berita dan pautan. Program ini menggunakan fungsi prepare() PDO dan fungsi bindParam() untuk mengelakkan serangan suntikan SQL dan ralat jenis data.

  1. Kod lengkap

Dengan menggabungkan kod di atas bersama-sama, anda boleh mendapatkan program perangkak web yang ringkas Kod lengkapnya adalah seperti berikut:

<?php

// 连接数据库
$host = 'localhost';
$user = 'root';
$password = 'root';
$database = 'test';
$charset = 'utf8mb4';
$dsn = "mysql:host={$host};dbname={$database};charset={$charset}";
$pdo = new PDO($dsn, $user, $password);

// 获取新浪新闻主页热门推荐新闻标题和链接
$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

// 插入数据库
$sql = "INSERT INTO news(title, link) VALUES(:title, :link)";
$stmt = $pdo->prepare($sql);

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    $stmt->bindParam(':title', $title);
    $stmt->bindParam(':link', $link);
    $stmt->execute();
}

?>

3. Ringkasan

Pembangunan program perangkak web memerlukan penggunaan berbilang teknologi, termasuk pengaturcaraan rangkaian, analisis maklumat, penyimpanan data, dsb. Sebagai bahasa pengaturcaraan yang cekap, PHP mempunyai kelebihan yang luar biasa dalam pengaturcaraan rangkaian, dan perpustakaan kelas sumber terbuka yang kaya menjadikannya bahasa yang sangat sesuai untuk membangunkan program perangkak web.

Dalam pembangunan sebenar, program perangkak web perlu memberi perhatian kepada isu seperti pematuhan undang-undang, privasi data dan mekanisme anti perangkak. Pemaju harus menjalankan pembangunan yang berkaitan di bawah premis pematuhan undang-undang. Pada masa yang sama, tetapan munasabah seperti kelajuan permintaan program, pengepala permintaan HTTP rawak dan penggunaan IP proksi boleh mengelak sekatan dengan mekanisme anti-perakak dengan berkesan.

Untuk membangunkan program perangkak web, anda perlu mempertimbangkan sepenuhnya keperluan dan kebolehlaksanaan sebenarnya, serta memilih teknologi dan strategi yang sesuai. Kod contoh yang disediakan dalam artikel ini hanyalah pelaksanaan yang mudah Jika anda memerlukan program perangkak yang lebih lengkap, anda perlu mengkaji lebih lanjut pengetahuan yang berkaitan.

Atas ialah kandungan terperinci PHP dalam amalan: pembangunan program perangkak web yang cekap. 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