PHP Simple HTML DOM Parser Kütüphanesi!

Bunjo

Ar-Ge Ekibi Asistanı
14 Ara 2020
1,648
1,993
Environment.UserName


oqk18ir.png



p0qbke2.png



Merhabalar ben Bunjo, bu konuda PHP'de bulunan "Simple HTML DOM Parser" kütüphanesini anlatacağım.


Simple HTML DOM Parser

Simple HTML DOM Parser, tüm işlemleri çok basitleştiren ve dış kaynaktan elde edilen HTML kodlarını, içerisinde barındırdığı metotlar ile ayrıştırma işlemlerini kolaylaştıran hafif ve kullanışlı olan bir sınıf/kütüphane ve yardımcı araçtır. Orijinal sitesine ve dokümantasyonuna Simple HTML DOM documentation adresinden ulaşabilirsiniz.

ctf0sk9.png


Kütüphane Kurulumu

Kütüphanein indirme adresine giderek, kütüphaneyi indiriyoruz. İndirdiğiniz sürüme bağlı olarak dosya sayısı ve isimleri değişebilir, hafif bir kütüphane olduğunu daha önceden belirtmiştim bu sebep ile bizim sadece ihtiyacımız olan dosya "simple_html_dom.php" dosyası olacaktır.

kwp0mik.png


XAMPP veya AppServ gibi kontrol panelleri ile web sunucunuzu başlattıktan sonra, "simple_html_dom.php" dosyanızı oluşturduğunuz proje dizinine atınız/kopyalayınız.

PHP dosyanıza require veya include fonksiyonları ile dahil edebilirsiniz.


PHP:
<?php

include('simple_html_dom.php');

?>

Kurulumlar buraya kadardı.


p0qbke2.png


Karşılaşabileceğiniz Hatalar

PHP:
<?php

include('simple_html_dom.php');
$html = file_get_html("https://www.google.com");

?>

file_get_html() metotu ile herhangi bir URL'den DOM oluşturmaya çalıştığımızda "Warning: file_get_contents(): stream does not support seeking in" şeklinde hata alıyor iseniz, kullandığınız PHP sürümünüze göre farklı hata çözümleri deneyebilirsiniz.

Php.ini dosyanızda:

;allow_url_fopen = On
;extension=php_openssl.dll

satırlarının başlarında ";" işaretleri varsa, bu işaretleri kaldırınız, bu işaretler yorum satırı görevi görüp gerekli işlevlerin çalışmasını engelliyor. Bu değişiklerden sonra sunucunuzu yeniden başlatmanız gerekiyor. Sunucunuzu yeninden başlatmazsanız, yaptığımız değişiklerin hiçbirisi uygulanmayacaktır ve hata almaya devam edeceksiniz.

Eğer başka hatalar ile karşılaştıysanız, php.net ve stackowerflow.com adreslerinden gerekli hataların çözümlerini kolaylıkla bulabilirsiniz.

ctf0sk9.png


Temel Kullanım Örnekleri

Temel kullanımda dilerseniz ayrıştırdığınız HTML kodlarını str_get_html() fonksiyonu ile ya da direkt olarak site kaynağını file_get_html() fonksiyonu ile elde ederek kullanabilirsiniz.

HTML kodlarını kendimiz belirteceğimiz zaman, str_get_html() fonksiyonu içerisine tırnak işaretleri eşliğinde yazarız.

PHP:
<?php

include('simple_html_dom.php');
$html = str_get_html('<div class="bunjo">Ruby, PHP, C/C++</div>');

?>

HTML kodlarını bir URL'den çekmek isterseniz, file_get_html() fonksiyonunu kullanmalısınız.

PHP:
<?php

include('simple_html_dom.php');
$html = file_get_html("https://example.com/");

?>


HTML Elemanlarını Çekmek

Başlangıç olarak kendimizin tanımladığı HTML kodlarından, find() fonksiyonu ile veri çekmeye çalışalım.

PHP:
<?php

include('simple_html_dom.php');
$html = str_get_html('<h1 class="bunjo">Ruby, PHP, C/C++</h1>');

$dom = $html->find('h1');
echo $dom[0];
?>

Çıktı:

Kod:
Ruby, PHP, C/C++

Bu örnekte "h1" etiketine sahip olan "Ruby, PHP, C/C++" verisini parse etmiş olduk.

Birden fazla "h1" etiketi varsa ve sınıf gözetilmeden bakılıyor ise;

PHP:
<?php

include('simple_html_dom.php');
$html = str_get_html('<h1 class="bunjo">Ruby, PHP, C/C++</h1><h1 class="bunjo">Python, GoLang, C#</h1>');

$dom = $html->find('h1');
echo $dom[1];
?>

Bir önce yaptığımız örnekte $dom[] dizisindne 0. elemanı almıştık, birden fazla aynı etikete sahip veri olduğu zaman $dom[0], $dom[1]...$dom[n] şeklinde kolaylıkla veriyi çekebilirsiniz.

Veya

PHP:
<?php

include('simple_html_dom.php');
$html = str_get_html('<h1 class="bunjo">Ruby, PHP, C/C++</h1><h1 class="bunjo">Python, GoLang, C#</h1>');

echo $html->find('h1', 1);
?>

Kod alternatiflerini deneyebilirsiniz.

Tüm elemanları yazdırmak isterseniz foreach() döngüsünü kullanabilirsiniz.

PHP:
<?php

include('simple_html_dom.php');
$html = str_get_html('<h1 class="bunjo">Ruby, PHP, C/C++</h1><h1 class="bunjo">Python, GoLang, C#</h1>');

$dom = $html->find('h1');

foreach ($dom as $data) {
    echo $data;
}
?>
rpyj47v.gif


Kod Çıktısı:
Kod:
Ruby, PHP, C/C++
Python, GoLang, C#


Class (Sınıf) ve ID Bulmak

HTML kodları içerisinde yer alan CSS seçicileri kullanarak ayrıştırma işlemlerimizi yapabiliriz.

PHP:
<?php

include('simple_html_dom.php');
$html = str_get_html('<div id="konu"><p class="baslik">PHP HTML DOM Parser Kütüphanesi!</p><p class="yazar">Bunjo</p></div>');

?>

ID değerlerinden seçim yapmak için # (diyez) işaretini, sınıflardan seçim yapmak için ise "." işaretini kullanırız.

PHP:
<?php

include('simple_html_dom.php');

$html = str_get_html('<div id="konu"><p class="baslik">PHP HTML DOM Parser Kütüphanesi!</p><p class="yazar">Bunjo</p></div>');
$dom = $html->find('#konu');

echo $dom[0];
?>

Kod Çıktısı:

Kod:
PHP HTML DOM Parser Kütüphanesi!

Bunjo

ovca0xc.gif



PHP:
<?php

include('simple_html_dom.php');

$html = str_get_html('<div id="konu"><p class="baslik">PHP HTML DOM Parser Kütüphanesi!</p><p class="yazar">Bunjo</p></div>');
$dom = $html->find('.baslik');

echo $dom[0];
?>

Kod Çıktısı:

Kod:
PHP HTML DOM Parser Kütüphanesi!

PHP:
<?php

include('simple_html_dom.php');

$html = str_get_html('<div id="konu"><p class="baslik">PHP HTML DOM Parser Kütüphanesi!</p><p class="yazar">Bunjo</p></div>');
$dom = $html->find('.yazar');

echo $dom[0];
?>

Kod Çıktısı:

Kod:
Bunjo



Çoklu Seçim

Sınıflar birden fazla HTML elemanlarına verilebilir. Bu durumda sınıf-eleman ayrıştırması yapıp istediğimiz veriyi ayırabiliriz.

PHP:
<?php

include('simple_html_dom.php');

$html = str_get_html('<div><p class="abc123">Python</p><b class="abc123">Ruby</b><span class="abc123">PHP</span></div>');
$dom = $html->find('b.abc123');

echo $dom[0];

?>

Çıktı:

Kod:
Ruby
PHP:
<?php

include('simple_html_dom.php');

$html = str_get_html('<div><p class="abc123">Python</p><b class="abc123">Ruby</b><span class="abc123">PHP</span></div>');
$dom = $html->find('span.abc123');

echo $dom[0];
?>

Çıktı:

Kod:
PHP
2tvb2gm.gif


p0qbke2.png


Anlatacaklarım bu kadardı daha fazlası için belirttiğim dokümantasyondan yararlanabilirsiniz.

Hatalar olabilir önerilere açığım, okuyan herkese teşekkür ederim.

 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.