Scrapping www.sunnah.com (Bukhari) utk seorang teman.

Seorang teman meminta bantuan untuk mengambil data dari website www.sunnah.com (scrapping), memasukkannya ke dalam database dan menampilkan nya …

ada contoh halaman yang akan di scrapping yakni : https://sunnah.com/bukhari/1

saya ingetnya cuma pakai PHP Simple HTML DOM Parser untuk melakukan hal tersebut.

dan ada 4 poin yang ingin di ambil antara lain seperti terlihat di gambar berikut

saya gak ngerti bahasa Arab ya .. jadi saat saya coba di localhost terlebih dahulu, ternyata gak jalan bahasa Arab nya, yang muncul adalah character aneh, tetapi saat di onlinekan, tidak ada masalah dengan bahasa Arab nya.

yang juga dibutuhkan adalah ada input URL yang dibutuhkan terlebih dahulu, sehingga butuh Form untuk Input URL yang akan di scrapping.

berikut form HTML nya

<!DOCTYPE html>
<head><title>Parsing</title>
<body>
<center>
<form action = “” method=”POST”>
URL : <input type=”text” name=”url” style=”width:400px;” placeholder=”Masukkan URL nya” value=”<?=$_POST[‘url’];?>”>
<input type=”submit” name=”submit” value=”Tampilkan”>
<hr>
<center><a href=”lihat.php”>Lihat Data</a></center>
</form>
</center>
</body>
</html>

karena membutuhkan database untuk menyimpan hasil yg di scrapping maka butuh dibuatkan databasenya terlebih dahulu

berikut strukturnya :

CREATE TABLE `datanya` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`narated` text,
`english` text,
`arab` text,
`referensi` text,
`url` varchar(500) DEFAULT NULL,
`dtcreated` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;

setelah databasenya dibuat, maka proses coding nya .. dimulai …

tampilan nya seperti berikut :

dan berikut hasil yg sudah dikeluarkan dari database.

 

 

 

 

 

 

 

 

berikut codenya :

<!DOCTYPE html>
<head><title>Parsing</title>
<body>
<center>
<form action = “” method=”POST”>
URL : <input type=”text” name=”url” style=”width:400px;” placeholder=”Masukkan URL nya” value=”<?=$_POST[‘url’];?>”>
<input type=”submit” name=”submit” value=”Tampilkan”>
<hr>
<center><a href=”lihat.php”>Lihat Data</a></center>
</form>
</center>
</body>
</html>

<?php
//Konfigurasi DB disini ————–
$host=”localhost”; // Host name
$username=”xxx”; // Mysql username
$password=”xxx”; // Mysql password
$db_name=”xxx”; // Database name
// ———————————–

$conn = mysqli_connect($host, $username, $password, $db_name)or die(“cannot connect”);

if($_SERVER[‘REQUEST_METHOD’]==”POST”) {

include_once(‘simple_html_dom.php’);

$url = $_POST[‘url’];
$html = file_get_html($url);

foreach($html->find(‘div.text_details’) as $c) {
$datac[] = $c;
}
foreach($html->find(‘div.bottomItems’) as $d) {
$datad[] = $d;
}

foreach($html->find(‘*[class=”arabic_hadith_full arabic”]’) as $q) {
$dataq[] = $q;
}
foreach($html->find(‘div.actualHadithContainer’) as $s) {
$datas[] = $s;
}

foreach($html->find(‘table tbody tr td’) as $x => $y) { //cek referensi
$datatable[] = trim($y->plaintext);
$rio[] = $datatable[3];
}

foreach($html->find(‘table tbody’,0)->find(‘tr’) as $tabelnya) {
$kolom = $tabelnya->find(‘td’,1)->plaintext;
$kol[] = $kolom;
$baris[] = $kol[1];//echo $kol[2];
$cekrio = $kol[1];
}

$cek = “select count(*) as jumlah from datanya where url='”.$url.”‘ “;
$qcek = mysqli_query($conn,$cek);
$rqcek = mysqli_fetch_array($qcek);
if(!$rqcek[‘jumlah’]>=1) { //jika gak ada tampilkan dan input datanya ke DB

foreach($html->find(‘div.hadith_narrated’) as $index => $e) {

$narasi = $e->outertext;
echo “<div style=’background-color:#ffdd00;width:500px;’>”;
echo $narasi;
echo “</div>”;

echo “<div style=’float:left;background-color:#ccffff;width:700px;’>”;
echo $datac[$index];
$english=$datac[$index];
echo “</div>”;

echo “<div style=’float:right;background-color:#ccffff;width:500px;’>”;
echo $dataq[$index];
$arab = $dataq[$index];
echo “</div><br>”;

echo “<div style=’background-color:#ddd;width:500px;’>”;
echo $datad[$index];
$referensi=$datad[$index];
echo “</div>”;

echo “<hr>”;

//execute input when no URL like
$input = “insert into datanya set narated='”.mysqli_real_escape_string($conn, $narasi).”‘,english='”.mysqli_real_escape_string($conn,$english).”‘,arab='”.mysqli_real_escape_string($conn,$arab).”‘,referensi='”.mysqli_real_escape_string($conn,$referensi).”‘,url='”.$url.”‘,dtcreated=now()”;

mysqli_query($conn,$input);

} //e foreach

} else { //just display

foreach($html->find(‘div.hadith_narrated’) as $index => $e) {
$narasi = $e->outertext;
echo “<div style=’background-color:#ffdd00;width:500px;’>”;
echo $narasi;
echo “</div>”;

echo “<div style=’float:left;background-color:#ccffff;width:700px;’>”;
echo $datac[$index];
$english=$datac[$index];
echo “</div>”;

echo “<div style=’float:right;background-color:#ccffff;width:500px;’>”;
echo $dataq[$index];
$arab = $dataq[$index];
echo “</div><br>”;

echo “<div style=’background-color:#ddd;width:500px;’>”;
echo $datad[$index];
$referensi=$datad[$index];
echo “</div>”;

echo “<hr>”;
} //foreach

} //e else
}
?>
<script>

</script>

<script src=”https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js”></script>
<script>
$(document).ready(function(){
//$(‘.bottomItems’).hide();
$(“tr:nth-of-type(1), tr:nth-of-type(3),tr:nth-of-type(4)”).hide();
$(‘.hadith_permalink’).hide();
//$(“.hadith_reference td:contains(‘In-book reference’)”).html(” “);
//$(“.hadith_reference td:contains(‘ :’)”).html(” “);
});
</script>

 

demikian semoga membantu.

Rio Yotto

Leave a Reply

Your email address will not be published. Required fields are marked *