Merhaba DarkMIS yazılım MYC Hizmetleri olarak sıkça sorulan ve merak edilen web site üzerinden veri-data çekme işlemleri hakkında sizlere içerik hazırladık. İçerikte kullanılacak kilit teknoloji yapısı ise HtmlAgilityPack paketidir. Arzu ederseniz HtmlAgilityPack Kullanımı hakkındaki içeriğimize artık geçiş yapalım.
Bu arada Düzce’de çok büyük bir yazılım şirketinde Full Stack yazılım geliştirici olarak görev alan Onurcan arkadaşıma başarılarından dolayı ve naif yapısından ötürü saygılarımı sunar ve başarılarının devamını dilerim.
Aslında bu konuyu yani bir web siteden data çekme olayını 2 şekilde inceleyeceğiz. İlk olarak şunu belirtmeliyim ki bu içerikten faydalana bilmeniz için aşağıdaki teknolojilere aşina olmanız gerekmektedir.
HtmlAgilityPack Kullanımı İçin İhtiyaç Duyulan Teknoloji & Beceriler
- Visual Studio Programı.(2015 ve sonrası) Önerim Visual Studio 2019
- C# Programlamada karar yapıları ve döngüleri bilmeniz gerekmektedir.
- HTML yapısına hakim olmanız gerekmektedir.
- System.IO & System.Net Kütüphaneleri hakkında bilginiz olmalı.
- string Metotları hakkında bilgi sahibi olmanız gerekmektedir.
- EntityFramework ile MSSQL veri tabanı alt yapısı.
- OOP bilmeniz de işinizi kolaylaştıracaktır ama bilmeseniz de olur.(Bu proje için)
Eğer yukarıda ki yapılar ile alakalı destek bir bilgiye ihtiyacınız var ise benim şahsi github sayfamdaki bilgilerden yararlanabilirsiniz.
İlk Örnek HtmlAgilityPack Kullanım İşleyişi
Visual Studio içerisinde oluşturduğumuz bir WinFormApp uygulaması içerisine Nuget paket yöneticisini kullanarak HtmlAgilityPack yapısını projemize dahil edelim.
Arzu ederseniz Package Manager Console üzerinden de “Install-Package HtmlAgilityPack” kod satırını çalıştırarak projenize yapıyı ekleyebilirsiniz. Karar tamamen sizin gönlünüze kalmış.
Açılmış vaziyette bekleyen WinFormApp içerisine Tool(Araç) penceresinden bir buton ve bir listBox ekleyelim. Eklenen butonun Click Event içerisinde de açılan süslü parantez alanları içerisine kodlarımızı yazmadan ilk olarak kütüphanelerimizi çağırmamız gerekiyor.
using HtmlAgilityPack;
using System.Net;
Gerekli olan yapıları projemizde çağırdıktan sonra artık buton içerisinde yer alan Click Event alanına asıl kodlarımızı yazabiliriz.
Uri url = new Uri("http://www.w3schools.com/htmldom/default.asp");
WebClient client = new WebClient();
string html = client.DownloadString(url);
// Adresten istek yapı html kodlarını indiriyoruz.
HtmlAgilityPack.HtmlDocument dokuman = new HtmlAgilityPack.HtmlDocument();
dokuman.LoadHtml(html);
// İndirdiğimiz html kodlarını bir HtmlDocment nesnesine yüklüyoruz.
HtmlNodeCollection basliklar = dokuman.DocumentNode.SelectNodes("//h2[@class='tutheader']");
// Html dökümanı içndeki h2 etiketlerinden class'ı tutheader olanları liste halinde alıyoruzç
foreach (var baslik in basliklar)
{
listBox1.Items.Add(baslik.InnerText);
// Biraz önceki basliklar koleksiyonunu tek tek gezerek, her bir elemanının içindeki text'i alıyoruz
}
Yukarıda döngü ile metot tarafından gelen metinsel verilerileri karar yapıları kullanarak eleyebilir veya önceden kayıtlı dataları tekrar işlenmeden atlayabilirsiniz. İşler tablo işleme gibi potansiyel iç içe etiket ve nesnele gelince sizlere aşağıdaki örnekleri sunmak isterim.
foreach (HtmlNode row in doc.DocumentNode.SelectNodes("/html/body/table/tbody/tr/td/table[@id='table2']/tbody/tr"))
{
HtmlNodeCollection cells = row.SelectNodes("td");
for (int i = 0; i < cells.Count; ++i)
{
if (i == 0)
{ Response.Write("Person Name : " + cells[i].InnerText + "<br>"); }
else {
Response.Write("Other attributes are: " + cells[i].InnerText + "<br>");
}
}
}
Diğer bir çalışma örneği vermek gerekirse bunu da deneyebilirsiniz.
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>");
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) {
Console.WriteLine("Found: " + table.Id);
foreach (HtmlNode row in table.SelectNodes("tr")) {
Console.WriteLine("row");
foreach (HtmlNode cell in row.SelectNodes("th|td")) {
Console.WriteLine("cell: " + cell.InnerText);
}
}
}
Bunlar da yardımcı olmadı ise HtmlAgilityPack için yardım ve örnek yapılarına buradan resmi web sitelerindeki içeriklerinden yulaşabilirsiniz.
Evet Entity Framework kullanarak da veri tabanı işleme yapısına geçersemde daha uzun bir içerik olur. Fakat bu konularda araştırma yapan birisi eminimki veri tabanı işlemlerinde gayet başarılıdır. Bu sebepten dolayı içeriğimi burada sonlandırıyor ve hepinize başarılar diliyorum.
Entity Framework Code First Nasıl Kullanılır – Code First Kullanımı
Eğer sormak istediğiniz bir konu veya konu içerisinde yer alan bir detay var ise lütfen yorumlar kısmında bunu belirtiniz.
Hepinize saygı ve sevgilerimi sunar sağlıklı günler dilerim. Hoşçakalın.