PHP Tidak hanya digunakan untuk membuat situs web dinamis. Ia juga dapat menjadi mitra untuk mengumpulkan data secara online.
Berkat perpustakaan spesialis, Anda dapat dengan mudah mengatur pengikis efektif. Mari kita lihat bagaimana caranya.

Prasyarat untuk melakukan scraping dengan PHP
Sebelum memulai, pastikan :
- ✅ Memiliki pemrograman dasar dengan PHP.
- ✅ Memiliki pengetahuan tentang HTML dan CSS untuk menargetkan data yang akan diekstrak.
- ✅ Ketahui cara menggunakan Panggil. Ini adalah alat untuk mengelola dependensi PHP guna menginstal perpustakaan scraping seperti Guzzle, Symfony DomCrawler, atau Goutte.
- ✅ Memiliki server web lokal untuk menjalankan kode Anda (XAMPP, WAMP, atau MAMP).
- ✅ Memiliki editor kode untuk menulis skrip PHP Anda.
Alat bantu apa saja yang penting untuk web scraping dengan PHP?
PHP saja tidak cukup. Berikut ini adalah perpustakaan yang membuat pengikisan menjadi cepat dan efisien.
1. 1. Guzzle: Klien HTTP
Guzzle adalah pustaka yang paling banyak digunakan untuk mengirim permintaan HTTP. Untuk menginstalnya dengan Panggilbuka terminal Anda, buka folder proyek Anda dan ketik perintah :
komposer membutuhkan guzzlehttp / guzzle
Composer mengunduh pustaka dan membuatnya dapat digunakan secara langsung dalam kode Anda.
Berikut adalah contoh kode sederhana untuk Mengambil konten dari sebuah URL :
request('GET', $url);
// Ambil kode HTTP
$statusCode = $response->getStatusCode();
// Mengambil konten halaman
$content = $response->getBody() -> getContents();
echo "Kode HTTP : " . $statusCode . PHP_EOL;
echo "Konten halaman:" . PHP_EOL;
echo $content;
} catch (\Exception $e) {
echo "Kesalahan: " . $e-> getMessage();
}
2. Symfony DomCrawler dan Goutte: Ekstraksi Data
Dua pustaka yang banyak digunakan untuk menelusuri dan menganalisis HTML:
- Symfony DomCrawler yang memungkinkan Anda menavigasi HTML menggunakan selektor CSS dan menargetkan elemen tertentu.
- Jatuhkan. yang merupakan pembungkus untuk Guzzle dan DomCrawler, sangat menyederhanakan proses scraping.
Contoh dengan Symfony DomCrawler :
request('GET', 'https://exemple.com');
$html = $response->getBody() -> getContents();
$crawler = new Crawler($html);
// Seleksi berdasarkan kelas
$crawler->filter('.my-class')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
// Seleksi berdasarkan ID
$crawler->filter('#mon-id')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
// Seleksi berdasarkan tag
$crawler->filter('h1')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
Contoh dengan Goutte
request('GET', 'https://exemple.com');
// Pemilihan berdasarkan kelas
$crawler->filter('.ma-class')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
// Seleksi berdasarkan ID
$crawler->filter('#mon-id')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
// Seleksi berdasarkan tag
$crawler->filter('p')->each(function ($node) {
echo $node->text() . PHP_EOL;
});
3. Perpustakaan dan alat bantu lainnya
Untuk informasi lebih lanjut, berikut adalah beberapa opsi lainnya:
- 🔥 PHP-Scraper Ini adalah perpustakaan PHP yang memudahkan ekstraksi informasi dari halaman web dengan mengelola kompleksitas HTML dan selektor. Perpustakaan ini banyak digunakan oleh pengembang dalam proyek mereka melalui Composer.
Instalasi # dengan Composer
menulis membutuhkan fabpot / goutte
request('GET', 'https://example.com');
$title = $crawler->filter('title')->text();
echo "Judul halaman: " . $title;
- 🔥 Data Cerah Ini adalah platform profesional untuk pengumpulan data skala besar dengan proxy terintegrasi.

- 🔥 ScraperAPI Ini adalah layanan pengikisan web berbasis cloud yang dapat diakses melalui API. Alih-alih menggunakan perpustakaan lokal untuk melakukan semua pekerjaan, Anda cukup mengirimkan permintaan sederhana ke API ScraperAPI dengan menentukan URL halaman yang akan diikis.
Bagaimana cara membuat scraper web sederhana di PHP?
Berikut adalah tutorial untuk membuat scraper fungsional di PHP:
Langkah 1: Menginstal dependensi
Gunakan Panggil untuk menginstal Jatuhkan. terima kasih kepada :
menulis membutuhkan fabpot/goutte
Langkah 2: Mengambil konten dari sebuah halaman
Membuat Permintaan HTTP GET dan rmembaca sekilas konten HTML dari halaman menggunakan Goutte dengan perintah :
request('GET', $url);
// Mengambil HTML mentah jika diperlukan
$html = $crawler->html();
echo substr($html, 0, 500) . '...'; // pratinjau
Langkah 3: Ekstrak data
Setelah Anda mendapatkan konten HTML dari halaman tersebut, tujuannya adalah untuk mengekstrak data tertentu.
👉 Berikut adalah contoh kode PHP untuk Menggores judul-judul dari sebuah halaman blog dengan Goutte, menggunakan pemilih CSS untuk menargetkan <h2> di dalam elemen-elemen <article>.
<?php
require 'vendor/autoload.php';
use Goutte\Client;
$client = new Client();
$url = 'https://exemple.com/blog'; // Remplacez par l'URL de votre page cible
// Faire une requête GET pour récupérer la page
$crawler = $client->request('GET', $url);
// Sélectionner les éléments <h2> dans <article> avec le sélecteur CSS
$titres = [];
$crawler->filter('article h2')->each(function ($node) use (&$titres) {
// Récupérer le texte du titre
$titres[] = trim($node->text());
});
// Afficher les titres extraits
print_r($titres);
?>
Dalam contoh ini :
- Kami menggunakan pemilih CSS
item h2untuk menargetkan judul artikel di<h2>di dalam tag<article>. - Teks untuk setiap judul diekstrak menggunakan fitur
text(), dan kami menambahkannya ke tabel.1TP65Judul. - Judul-judul tersebut kemudian ditampilkan dengan
print_r($itles);.
Itu Pemilih CSS (atau XPath) juga dapat digunakan untuk ekstrak atribut elemen HTML. Misalnya, jika setiap judul blog adalah tautan dalam tag <a>, kita dapat mengekstrak atribut href untuk mendapatkan URL artikel.
👉 Berikut adalah contoh dengan Goutte untuk ekstrak tautan artikel :
request('GET', $url);
// Pilih tautan dalam judul
$itles = [];
$crawler->filter('artikel h2 a')->each(function ($node) use (&$itles) {
1TP65Judul = trim($node->text());
$link = $node->attr('href'); // Ekstrak atribut href
// Tambahkan judul dan URL ke tabel
$itles[] = [
judul' => 1TP65Judul,
url' => $lien,
];
});
// Menampilkan hasil
print_r(1TP65Judul);
?>
Dalam contoh ini :
- Kami memilih tautan yang terdapat dalam
<a>di dalam tag<h2>di dalam elemen-elemen<article>. - Kami mengambil atribut
hrefdari setiap tautan denganattr('href'). - Judul dan URL-nya ditambahkan ke tabel
1TP65Judulkemudian ditampilkan denganprint_r($itles);.
👉 Lukisan 1TP65Judul akan berisi elemen-elemen dengan kedua judul dan tautan dari setiap item. Berikut ini adalah contoh format data yang dikembalikan:
Array
(
[0] => Array
(
[title] => Judul artikel 1
[url] => /artikel1
)
[1] => Array
(
[title] => Judul Artikel 2
[url] => /artikel2
)
)
Dalam contoh ini :
- Setiap elemen larik adalah larik asosiatif dengan dua kunci :
juduluntuk judul artikel danurluntuk URL yang sesuai. - Data yang diekstrak disajikan dalam bentuk tabel dua tingkat, dengan setiap entri berisi judul dan tautan terkait.
Tahap 4: Menata dan menyimpan data
Setelah data diekstrak, penting untuk mengaturnya dengan benar. Untuk melakukan ini, kita akan menyusunnya dalam sebuah Tabel PHPkemudian mengekspornya dalam format terstruktur seperti JSON Di mana CSV.
request('GET', $url);
// Ekstrak judul dan URL dalam tabel terstruktur
$data = [];
$crawler->filter('artikel h2 a')->each(function ($node) use (&$data) {
$data[] = [
title' => trim($node->text()), // Ekstrak judul
url' => $node->attr('href'), // Ekstrak atribut href (URL)
];
});
// Menampilkan data yang diekstrak
print_r($data);
?>
Setelah data diatur, Anda dapat mengekspornya dalam format JSONyang berguna untuk API atau untuk digunakan dalam aplikasi web:
<?php
// Exporter les données en JSON
file_put_contents('export.json', json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE));
echo "Les données ont été exportées en JSON dans 'export.json'.";
?>
File export.json akan dibuat dalam format yang dapat dibaca, yang mungkin terlihat seperti ini:
[
{
"title": "Judul Pasal 1",
"url": "/artikel1"
},
{
"title": "Judul Pasal 2",
"url": "/artikel2"
}
]
Jika Anda ingin mengekspor data sebagai tabel CSV, Anda dapat menggunakan fputcsv untuk menulis data ke file CSV :
<?php
// Exporter les données en CSV
$fp = fopen('export.csv', 'w');
// Ajouter l'en-tête (titres des colonnes)
fputcsv($fp, ['title', 'url']);
// Ajouter chaque ligne de données
foreach ($data as $row) {
fputcsv($fp, [$row['title'], $row['url']]);
}
// Fermer le fichier
fclose($fp);
echo "Les données ont été exportées en CSV dans 'export.csv'.";
?>
File export.csv akan terlihat seperti ini:
judul, url
Judul artikel 1, /artikel1
Judul artikel 2, /artikel2
Bagaimana cara mengatasi masalah web scraping yang umum terjadi pada PHP?
Selama operasi penggalian web dalam PHPNamun demikian, ada kemungkinan mengalami masalah. Berikut ini adalah solusi untuk masalah yang paling umum.
1. Mengelola kesalahan
- Kesalahan koneksi
Terkadang, permintaan bahkan tidak sampai ke server. Anda mungkin menemui “Tidak ada jaringan”, “URL tidak valid”, “Server tidak dapat diakses”dll. Dalam hal ini, a coba/tangkap untuk mencegah skrip Anda berhenti secara tiba-tiba.
👉 Berikut ini contoh penggunaan Guzzle :
request('GET', 'https://example.com/api/data');
// Periksa apakah permintaan berhasil
if ($response->getStatusCode() === 200) {
// Memproses respons jika berhasil
$body = $response->getBody();
echo "Data diterima : " . $body;
}
} catch (RequestException $e) {
// Menangkap kesalahan koneksi dan permintaan
if ($e-> hasResponse()) {
// Menampilkan kode kesalahan jika tersedia
echo "Kesalahan permintaan: " . $e->getResponse()->getStatusCode();
} else {
// Jika koneksi gagal (misalnya, server tidak dapat dijangkau)
echo "Kesalahan koneksi: " . $e-> getMessage();
}
}
}
// Panggil fungsi
membuat_permintaan_dengan_guzzle();
?>
- Kode status HTTP
Meskipun koneksi berhasil, server mungkin merespons dengan kesalahan (404 = halaman tidak ditemukan, 500 = kesalahan internetdll.). Anda dapat menguji kode status dengan getStatusCode().
request('GET', 'https://example.com/api/data');
// Memeriksa kode status dari respons
$status_code = $response->getStatusCode();
// Periksa apakah permintaan berhasil
if ($status_code === 200) {
// Memproses respons jika berhasil
$body = $response-> getBody();
echo "Respons berhasil dengan kode: " . $status_code . "
";
echo "Data diterima: " . $body;
} elseif ($status_code === 404) {
echo "Kesalahan 404: Halaman tidak ditemukan
";
} elseif ($status_code === 500) {
echo "Kesalahan 500 : Kesalahan server internal
";
} else {
echo "Kode status: " . $status_code . "
";
}
} catch (RequestException $e) {
// Menangkap kesalahan koneksi dan permintaan
if ($e-> hasResponse()) {
// Menampilkan kode kesalahan HTTP jika tersedia
echo "Kesalahan HTTP: " . $e->getResponse()->getStatusCode() . "
";
} else {
// Jika terjadi kegagalan koneksi (misalnya, server tidak dapat dijangkau)
echo "Kesalahan koneksi: " . $e-> getMessage();
}
}
}
// Panggil fungsi
membuat_permintaan_dengan_guzzle();
?>
- Kesalahan penguraian
Parsing adalah proses analisis HTML oleh scraper Anda. Jika halaman tersebut tidak terbentuk dengan baik, DomCrawler atau Goutte dapat mengalami crash atau tidak mengirimkan apa pun.
Untuk mengatasi jenis kesalahan ini, selalu periksa apakah konten tersebut ada sebelum mencoba mengekstraknya. Gunakan kondisi. (hitung(), filter()...) untuk memastikan bahwa elemen yang ditargetkan benar-benar ada. Kemudian, kelilingi parsing dengan coba/tangkap untuk mencegah skrip agar tidak crash.
request('GET', 'https://example.com');
// Periksa apakah elemen target ada sebelum mencoba mengekstraknya
$elements = $crawler->filter('div.target-element');
if ($elements->count() > 0) {
// Elemennya ada, kita bisa mengekstraknya
$content = $elements->first()->text();
echo "Konten yang diekstrak: " . $content;
} else {
// Elemen tidak ditemukan
echo "Elemen target tidak ditemukan di halaman;
}
} catch (Exception $e) {
// Tangkap kesalahan penguraian
echo "Kesalahan saat mem-parsing halaman: " . $e-> getMessage();
}
}
// Panggil fungsi
fungsi scrape_website();
?>
2. Menyiasati keterbatasan
Beberapa situs menggunakan tindakan perlindungan untuk mempersulit pengikisan.
- ❗ Pemblokiran berdasarkan IP Anda bisa menggunakan proxy seperti yang ada di platform Bright Data.
- ❗ JavaScript secara default, PHP tidak dapat menjalankan JavaScript. Untuk melakukan hal ini, penggunaan browser tanpa antarmuka (headless browser) diperlukan.
- ❗ Robot.txt Sebelum menghapus, penting untuk memeriksa file ini agar Anda dapat bertindak secara legal dan bertanggung jawab.
FAQ
Apakah web scraping legal?
📌 The legalitas web scraping adalah subjek yang kompleks. Di Prancis, seperti halnya di tempat lain, semuanya tergantung pada kerangka hukum, data yang dikumpulkan, dan cara penggunaannya.
Apa perbedaan antara web scraping dan web crawling?
- itu pengikisan web adalah proses pengambilan data yang akurat dari suatu situs.
- itu perayapan web adalah tindakan menelusuri halaman untuk mengindeksnya.

Bagaimana cara mengikis situs yang memerlukan autentikasi (login)?
Untuk mengikis situs yang memerlukan autentikasi, Anda perlu mensimulasikan koneksi. Dengan PHP, solusi yang paling umum adalah Guzzle.
Anda mengirimkan pengenal melalui permintaan POST, lalu membiarkan sesi tetap terbuka untuk mengambil halaman yang diproteksi.
Bagaimana Anda mengelola scraping situs dengan halaman dinamis yang dimuat dalam AJAX?
Sebagai pengingat, PHP tidak dapat mengeksekusi kode JavaScript sisi klien.
Untuk mengikis halaman jenis ini dengan PHP, Anda dapat menggunakan BrowserShotperpustakaan yang menggunakan peramban nyata di latar belakang (Headless Chrome/Chromium) untuk memuat halaman dan menjalankan JavaScript.
Solusi lainnya adalah dengan mengintegrasikan PHP dengan alat bantu berbasis Node.jsseperti Puppeteer untuk menghasilkan HTML yang dirender dan kemudian mengambil data dari PHP.
Untuk semua jenis pengikisan web dengan halaman dinamis, Anda juga dapat menggunakan alat khusus yang disebut browser tanpa kepala.
Apakah ada alternatif lain selain PHP untuk web scraping?
Ya, ada beberapa bahasa yang populer:
- Python dengan perpustakaannya yang kuat seperti BeautifulSoup dan Scrapy.
- Node.js yang sangat efektif untuk melakukan scraping pada situs web dinamis, menggunakan pustaka seperti Puppeteer atau Cheerio.

Bagaimana cara memprogram “scraper” secara etis dan bertanggung jawab?
Untuk mengikis secara etis, Anda perlu :
- ✔ Periksa file robots.txt untuk mengetahui aturannya.
- ✔ Batasi frekuensi permintaan Anda agar tidak membebani server situs.
- ✔ Hormati ketentuan yang berlaku Penggunaan situs.
- ✔ Jangan mengumpulkan data pribadi tanpa izin.
✅ Singkatnya pengikisan web adalah praktik yang ampuh, tetapi harus digunakan secara metodis dan bertanggung jawab.
👉 Dan Anda, apakah Anda pernah membuat pengikis dalam PHP atau bahasa lain? Ceritakan pengalaman Anda di bagian komentar.





