pillinetwork hesabınızla giriş yapın.

PHP ile Bot Yapımı (DOM tarzı) wordpress örneği

Bu anlatımı daha iyi anlayabilmek için biraz HTML DOM bilgisi gerekiyor.

Amaç:

Veri çekilmesi gereken adreste biraz dolaşıp bize gerekli alt sayfalardaki gerekli verileri çekmek.

Veri çekilmesi istenen adres: http://www.phpsorunu.com/2010/06/

Gerekli olan kütüphane veya classlar :
PHP Simple HTML DOM Parser

Buradan indirebilirsiniz.

Anlatım :

Çekilmek istenen veri adresteki sayfadaki wordpress konuları

Bot nasıl çalışıyor.

1. Verilen adrese gidiyor. ve POST classlı divlerin içindeki adresleri buluyor.
2. Daha sonra bulunan adresleri ziyaret edip konu başlığı ve konu içeriğini alıyor.

Geri kalan açıklamalar Aşağıdaki kodun içindedir.
Anlatamadığım bir yer olursa lütfen yorumlarınız ile belirtiniz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<? include 'simple_html_dom.php'; // gerekli class include edildi.
error_reporting(1);
$html = file_get_html('http://www.phpsorunu.com/2010/06/'); // html verisi çekilecek adres
foreach($html->find('div[class^="post"] h2 a') as $e){
// yukarıda her bir post class ı olan div in içinde
// h2 tagını arıyoruz ve bunun içindeki 'a' linkin href (yani referans adresini alıyoruz)
$link = $e->href; //linkimizi bulduk
$ic_sayfa = file_get_html($link); //botumuzu oraya gonderiyoruz
foreach ($ic_sayfa->find('div[class^="post"]') as $ic) {
//içerik yani konu sayfamızda gene post class lı dıvı buluyoruz
//buldugumuz divin içindeki h1 tagının içindeki veri bizim başlığımız oluyor ve bunu başlık
$baslik = $ic ->find ('h1',0) -> plaintext;
$konular[]['baslik'] = $baslik; // konular dizimize (array) baslık olarak kayıt ediyoruz
$icerik = '';
// wordpresste ki br yerine p tagını kullandığı için (BU TAGLAR ÇEKECEĞİMİZ VERİ TÜRÜNE GÖRE DEĞİŞİR) aşağıda p taglarının içeriğini almamız gerekiyor her p tagı için döngümüzü yazıyoruz
foreach ($ic -> find('p') as $icerikp){
if ($icerikp -> hasAttribute('class')){
// bize postmeta data gibi class ı p tagları gerekmediği için gerekli kontrolleri yapıyoruz
}
else {
$icerik.= $icerikp->outertext; }
// classsız p taglarının outertext ile <p>içindeki yazı </p> çeklinde içerik değişkenimize kayıt ediyoruz.
}
//bütün p taglarımızı alıncayda konular dizimizin icine icerik bolumune atiyoruz.
$konular[]['icerik'] = $icerik;
}
}
// sira geldi ekranda gostertmesi veya istediginiz işlemin yapılmasına.
foreach ($konular as $konu ){
echo '<div style="border: 3px solid navy; margin-top:10px;">';
echo '<h2>'.$konu['baslik'].'</h2>';
echo '<div>'.$konu['icerik'].'</div>';
echo '</div>';
}
?>

Spacer
Spacer
/* thedon yazdı. 30 Haziran 2010 13:54. 6 yorum var */

Yorumlar

Pek güzel bir belge, elinize sağlık

elinize sağlık

Bu yardımcı bılgı ıcın tesekkurler ama wp olması kotu oldu..

Bu kodda ufak tefek değişiklikler ile istenilen heryerden veri çeker gibi görünüyor. Yani WP diye bence incelemekten vazgeçmeyin :) Teşekkürler paylaşım için.

DOM nesnelerini ayirip gerekli kisimlari almamiza yariyor bu class.Bunu kulllanabilmemiz için sayfanın html valid veya ona yakın olması gerekiyor. WP de genelde valid oldugu icin hemde ornek site bizim oldugu icin oradan örnek verdim. istediğiniz her tür sitede kullanabilirsiniz.

/* yarım yarım çok ses olacağına güçlü bir tek ses olalım. */

üye olunpillinetwork sitelerine yorum ekleyebilmek ve daha fazlası için, üye olun ya da giriş yapın.

Bu Yazıyı Tutanlar

Bu yazıyı rapor et. Kural dışı içeriğe rastladığınızda editörlerimize rapor ederek müdahale edilmesini sağlayabilirsiniz. (Hangi durumlarda rapor edebilirim?)

Bu site

Nokta ve pilli ortak yapımı olan kodaman.org hep birlikte içerik üretip gelirini yazarları ile paylaştığımız kolektif bir kod yazarları blogudur. Siz de katılabilirsiniz.

pilliilan

son yorumlar

arama

pillinetwork