Dengan perkembangan Internet yang berterusan, jumlah maklumat telah meletup, dan mendapatkan maklumat berharga telah menjadi keperluan bagi ramai orang. Dalam persekitaran sedemikian, teknologi perangkak telah muncul secara beransur-ansur dan menjadi salah satu alat penting dalam era data besar. Teknologi crawler mempunyai pelbagai aplikasi dan boleh digunakan dalam banyak bidang seperti pemantauan pendapat awam rangkaian, analisis data dan perlombongan maklumat. Artikel ini akan memperkenalkan cara melaksanakan rangka kerja perangkak tersuai menggunakan PHP.
1. Prinsip rangka kerja perangkak
Perangkak ialah program yang secara automatik memperoleh maklumat halaman web dan mengekstrak data berharga untuk analisis dan penggunaan. Rangka kerja perangkak ialah asas program perangkak, yang merangkumi pemerolehan, penghuraian, penyimpanan dan kaedah lain yang disesuaikan.
Program crawler dilaksanakan melalui rangka kerja crawler Proses asas adalah seperti berikut:
2. Pelaksanaan rangka kerja perangkak PHP
Dalam PHP, permintaan HTTP boleh dilaksanakan melalui perpustakaan CURL. CURL ialah perpustakaan rangkaian sumber terbuka yang berkuasa yang boleh digunakan untuk memproses URL (Uniform Resource Locator, Uniform Resource Locator) dalam PHP
Kodnya adalah seperti berikut:
$ch = curl_init(); // 初始化 cURL $options = array( CURLOPT_URL => $url, // 请求的 URL CURLOPT_RETURNTRANSFER => 1, // 返回原生的输出内容 CURLOPT_ENCODING => '', // 自动处理响应头中的 Transfer-Encoding CURLOPT_USERAGENT => $_SERVER['HTTP_USER_AGENT'] // 模拟 user-agent ); curl_setopt_array($ch, $options); $result = curl_exec($ch); // 执行请求 curl_close($ch); // 关闭请求链接
Dalam kod di atas. , mula-mula Gunakan fungsi curl_init() untuk memulakan CURL, dan kemudian gunakan fungsi curl_setopt_array() untuk menetapkan pelbagai parameter permintaan CURL, termasuk URL yang diminta, mengembalikan kandungan output asli, memproses Pengekodan Pemindahan secara automatik dalam pengepala respons dan mensimulasikan ejen pengguna. Akhir sekali, laksanakan permintaan melalui curl_exec() dan tutup pautan permintaan. Selepas melaksanakan kod di atas, anda boleh berjaya mendapatkan maklumat halaman web tapak web sasaran.
Dalam PHP, anda boleh menggunakan kelas DOMDocument untuk menghuraikan teks HTML, yang menyediakan satu set DOM (Document Object Model, Document Object Model ) antara muka, yang boleh menghuraikan teks HTML dengan mudah.
Kod adalah seperti berikut:
$doc = new DOMDocument(); $doc->loadHTML($result); // 加载 HTML 内容 $xpath = new DOMXPath($doc); $tags = $xpath->query('//tag') // 获取指定标签 foreach ($tags as $tag) { // 对标签内容进行解析 }
Kod di atas mula-mula mencipta objek kelas DOMDocument, kemudian memuatkan teks halaman web melalui fungsi loadHTML(), kemudian memperoleh teg yang ditentukan melalui kelas DOMXPath, dan melaksanakan penghuraian kandungan teg.
Dalam PHP, data boleh disimpan melalui pangkalan data MySQL, yang menyediakan satu set antara muka PDO (Objek Data PHP, Objek Data PHP), anda boleh melakukan operasi pangkalan data dengan mudah.
Kodnya adalah seperti berikut:
$pdo = new PDO('mysql:host=$dbhost;dbname=$dbname', $username, $password); // 连接数据库 $sql = 'INSERT INTO table_name (field1, field2, ...) VALUES (:value1, :value2, ...)'; // SQL 语句 $stmt = $pdo->prepare($sql); // 预处理 SQL 语句 $stmt->bindParam(':param1', $value1); // 绑定参数 $stmt->bindParam(':param2', $value2); ... $stmt->execute(); // 执行 SQL 语句
Dalam kod di atas, mula-mula gunakan objek PDO untuk menyambung ke pangkalan data MySQL, kemudian gunakan pernyataan SQL untuk memasukkan data ke dalam jadual data yang ditentukan, dan mengikat parameter dengan memproses penyata SQL Selepas itu, data boleh disimpan dengan jayanya dalam pangkalan data dengan melaksanakan penyataan SQL secara langsung.
3. Kes penggunaan rangka kerja crawler
Selepas melaksanakan rangka kerja perangkak, kami boleh menggunakannya untuk merangkak mana-mana tapak web Kes penggunaan mudah akan ditunjukkan di bawah. Sebagai contoh, kita kini perlu merangkak maklumat pengguna Zhihu Mula-mula kita perlu mendapatkan maklumat halaman pengguna:
$url = "https://www.zhihu.com/people/xxx"; $result = getCurl($url);
Kemudian, kami menghuraikan maklumat halaman yang dikembalikan melalui XPath dan mendapatkan maklumat sasaran:
$doc = new DOMDocument(); $doc->loadHTML($result); $xpath = new DOMXPath($doc); // 用户名 $username = $xpath->query("//*[@class='ProfileHeader-name']/text()")->item(0)->nodeValue; // 签名 $userbio = $xpath->query("//div[@class='ProfileHeader-headline']/span//@title")->item(0)->nodeValue; // 关注数 $following_count = $xpath->query("//*[@class='NumberBoard-itemValue']/text()")->item(2)->nodeValue; // 粉丝数 $followers_count = $xpath->query("//*[@class='NumberBoard-itemValue']/text()")->item(3)->nodeValue;
$pdo = new PDO('mysql:host=localhost;dbname=database', 'username', 'password'); $sql = "INSERT INTO `zhihu_users`(`username`, `userbio`, `following_count`, `followers_count`, `updated_at`) VALUES (:username, :userbio, :following_count, :followers_count, NOW())"; $stmt = $pdo->prepare($sql); $stmt->bindParam(':username', $username); $stmt->bindParam(':userbio', $userbio); $stmt->bindParam(':following_count', $following_count); $stmt->bindParam(':followers_count', $followers_count); $stmt->execute();
Atas ialah kandungan terperinci Cara melaksanakan rangka kerja perangkak tersuai menggunakan PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!