Web uygulamaları geliştiren herkesin bir şekilde farklı amaçlar doğrultusunda bot yazma ihtiyacı olmuştur. Bot’lar kullanım amacına göre farklı algoritmalara sahip olabilmektedir. Söz gelimi arama motorlarının “örümcek” olarak adlandırılan yazılımları aslında sayfaları indeksleme özelliğine sahip olan özel bot’lardır.
Biz bu uygulamamızda küçük çaplı bir bot yazmış olacağız. Amacımız bir web sitesinin sahip olduğu resim bağlantılarını ve mevcut olan linklerini toplamak.
Buradaki mantığı kısaca özetleyecek olursak HTTP protokolünü ve Html dilini kullanan sistemlere .NET yapısının bize sunmuş olduğu ilgili sınıflar aracılığı ile bağlantı kurup, verileri toplamak ve düzenleyip istediğimiz biçimdeki bilgilere dönüştürmek olarak ifade edebiliriz.
Burada toplanan bilgilerin düzenlenmesi aşamasında ilk akla gelen Regex (düzenli ifadeler) olacaktır. Fakat Regex ile bu işi yapmak gerçekten can sıkıcı olabilir. Her farklı yapı için kendi Regex fonksiyonlarımızı oluşturmak biraz zahmetli olacaktır.
Biz burada sıfırdan Regex tanımlamak yerine bu iş için yazılmış olan HtmlAgilityPack kütüphanesini kullanacağız. Bu tarz da ki kütüphaneleri çok özel bir durum olmadığı sürece kullanmanızı tavsiye ederim. Çünkü sizin sıfırdan uğraşarak yapmak istediğiniz birçok fonksiyon bu kütüphanelerin içerisinde daha da gelişmiş olarak zaten mevcut olmaktadır.
Html Parser dediğimiz olay ise aslında toplanan bilgilerin düzenlenmesi aşamasıdır. Biz HtmlAgilityPack kütüphanesi ile toplamış olduğumuz bilgileri istediğimiz biçimde ayrıştırmaya çalışacağız. Yani Html Parse etmiş olacağız.
Bu kısa giriş den sonra dilerseniz uygulamamıza geçebiliriz.
HtmlAgilityPack API’sinin güncel olan sürümünü http://htmlagilitypack.codeplex.com/releases/view/44954 adresinden indiriyoruz ve projemize referans olarak ekliyoruz.
Ben resim ve link bağlantılarını ayrı ayrı elde etmek için form tasarımını aşağıdaki gibi yaptım.

Resimleri Ayrıştır ve Linkleri Ayrıştır butonlar’ına tıkladığım zaman ilgili listboxlar da ilgili bağlantı adreslerini almak istiyorum.
Bunun için ilgili siteye öncelikle bir istek de bulunacağız sonrasında siteden gelen cevabı okuyup html formata çevireceğiz. Bu aşamadan sonra html parse işlemleri için HtmlAgilityPack api’sini kullanacağız.
Eklenmesi gereken namespace’ler

Gerekli kodlarımız ve açıklamaları



Programımızı çalıştırdıkdan sonra ki ekran görüntümüz.

Dikkat ettiyseniz burada pek bir özel tanımlama yapmadan doğrudan tüm resim ve bağlantı linklerini aldık. Dilersek site içerisinde bulunan belli tanımlamalara ait bağlantıları isteğimize göre çekip alabiliriz. Örneğin ünlü Rock grubu Hypnogaja’nın http://www.hypnogaja.com/welcome.html sitesine bakalım. Grubun Here Comes The Rain Again adlı parçasını da dinlemenizi tavsiye ederim. Favori parçalardan biridir.
Burada html tarafında a tag’larına baktığımız zaman bir çoğunda onclick olayı olduğunu ve onclick="window.open(this.href); return false;" şeklinde tanımlandığını görüyoruz. Bizimde ihtiyacımız olan şey ise bu şekilde tanımlı linkleri almak olsun. Bunun için tek yapmamız gereken _htmlColl değişkenimize seçme işlemini nasıl yapacağını belirtmek.
İlgili satırı,

şeklinde tanımladığımızda onclick olayı 'window.open(this.href); return false;' şeklinde olan linkleri çekmiş olacağız.
Hepinize Kolay Gelsin. İyi Çalışmalar.
HtmlParse.rar