Dengan pertumbuhan pesat maklumat Internet, sejumlah besar data disimpan di tapak web, yang sangat bernilai kepada ramai pengguna. Oleh itu, teknologi perangkak secara beransur-ansur menjadi cara yang berkuasa untuk menggunakan data Internet.
Artikel ini memperkenalkan rangka kerja perangkak berdasarkan bahasa PHP: Guzzle dan Goutte. Guzzle ialah klien HTTP yang dibangunkan untuk PHP yang boleh digunakan untuk menghantar permintaan HTTP dan berinteraksi dengan sumber REST. Goutte ialah pelengkapnya Ia adalah rangka kerja perangkak web berdasarkan Guzzle yang boleh mendapatkan kandungan web dengan mudah dan melakukan pengekstrakan dan analisis data.
Pertama, kita perlu memasang Guzzle dan Goutte dalam PHP. Ia boleh dipasang melalui Komposer Arahan khusus adalah seperti berikut:
composer require guzzlehttp/guzzle composer require fabpot/goutte
Selepas pemasangan selesai, mari kita pelajari dahulu cara menggunakan Guzzle. Kami boleh menghantar permintaan HTTP GET dan mendapatkan kandungan respons melalui kod berikut:
<?php use GuzzleHttpClient; $client = new Client(); $response = $client->get('https://www.example.com'); echo $response->getBody();
Kod ini mula-mula mencipta objek GuzzleClient, dan kemudian menggunakan kaedah get() untuk menghantar permintaan GET ke URL yang ditentukan, dan Kandungan respons diperolehi. Panggil kaedah getBody() untuk mendapatkan kandungan badan tindak balas.
Goutte ialah rangka kerja perangkak web yang dibangunkan berdasarkan Guzzle, dan penggunaannya juga sangat mudah. Berikut ialah contoh mudah menggunakan Goutte:
<?php use GoutteClient; $client = new Client(); $crawler = $client->request('GET', 'https://www.example.com'); $crawler->filter('h1')->each(function ($node) { echo $node->text() . " "; });
Kod ini menggunakan Goutte untuk mencipta objek Klien, menghantar permintaan GET ke URL yang ditentukan, kemudian mendapatkan badan respons dan menghuraikannya ke dalam objek DOM . $crawler->filter('h1') ialah penapis yang menentukan semua nod teg h1 pada halaman, dan kemudian ia memanggil kaedah each() Untuk setiap nod teg h1, fungsi tanpa nama yang ditentukan akan dilaksanakan $node ialah objek nod semasa, dan kaedah text()nya boleh mendapatkan kandungan teks nod.
Mari lihat contoh yang lebih lengkap di bawah, yang menunjukkan cara menggunakan Goutte untuk merangkak soalan dan jawapan pada Zhihu, dan menyimpan nama pengguna, kandungan jawapan, bilangan suka dan masa menjawab ke Dalam fail CSV:
<?php use GoutteClient; $client = new Client(); $crawler = $client->request('GET', 'https://www.zhihu.com/question/21774949'); $fp = fopen('output.csv', 'w'); fputcsv($fp, ['User', 'Content', 'Votes', 'Time']); $crawler->filter('.List-item')->each(function ($node) use ($fp) { $user = $node->filter('.AuthorInfo .Popover')->text(); $content = $node->filter('.RichText')->text(); $votes = $node->filter('.Voters')->text(); $time = $node->filter('.ContentItem-time')->text(); fputcsv($fp, [$user, $content, $votes, $time]); }); fclose($fp);
Kod ini mula-mula merangkak halaman dengan ID soalan 21774949 pada Zhihu, kemudian menggunakan pemegang fail untuk menulis baris pengepala CSV pada fail output.csv. Seterusnya, gunakan kaedah penapis() untuk mencari semua nod soalan dan jawapan pada halaman, dan kemudian laksanakan fungsi tanpa nama pada setiap nod. Dalam fungsi tanpa nama, gunakan kaedah penapis() untuk mencari nama setiap pengguna, kandungan jawapan, bilangan suka dan masa menjawab, dan gunakan kaedah fputcsv() untuk menulis empat medan ini pada fail. Akhir sekali tutup pemegang fail.
Ringkasnya, sangat mudah untuk menggunakan Guzzle dan Goutte untuk membina rangka kerja perangkak, dan ia mempunyai fleksibiliti dan kebolehskalaan yang kuat, serta boleh digunakan pada pelbagai senario berbeza, termasuk tetapi tidak terhad kepada perlombongan data , Pengoptimuman SEO dan bidang lain. Walau bagaimanapun, sila ambil perhatian bahawa mana-mana perangkak perlu mematuhi fail robots.txt tapak web untuk mengelakkan daripada meletakkan beban yang tidak wajar pada tapak web sasaran dan melanggar privasi pengguna.
Atas ialah kandungan terperinci Pengenalan kepada rangka kerja perangkak berdasarkan PHP dan penjelasan terperinci tentang contoh aplikasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!