Web Scraping: İnternetin Derinliklerindeki Bilgilere Ulaşın
Günümüzde milyonlarca web sitesi bulunmakta ve bu sitelerdeki veri kaynakları da bir o kadar geniş. Ancak, bu bilgilerin doğru ve hızlı bir şekilde elde edilmesi oldukça önemli. Zamanın ne kadar kıymetli olduğunu fark ettiğimiz bu günlerde, web siteleri arasında kaybolmak istemeyiz. İşte tam bu noktada, Web Scraping teknolojisi devreye girer.
Web Scraping: İnternetin Veri Hazinelerini Keşfetme Sanatı
Web Sraping, belirli Web sitelerinden otomatik olarak veri çekme işlemidir. Başka bir söylemle Web scraping, modern dünyanın en güçlü veri madenciliği araçlarından biridir ve belirli web sitelerinden otomatik olarak veri çekme işlemidir. Bu yöntemle, internet üzerindeki geniş veri kaynaklarından istediğiniz bilgileri toplayabilirsiniz. Web Scraping, bilgi madenciliği (Data Mining) olarak da adlandırılır ve günümüzde birçok sektörde önemli bir araç olarak kullanılır.
Neden Web Scraping?
Milyonlarca web sitesi arasında kaybolmak yerine, Web Scraping sayesinde bu sitelerin içeriğinden hızlı ve doğru bir şekilde bilgi çekebilirsiniz. İnternet üzerindeki rekabetçi ortamda, doğru ve güncel veriye erişmek işletmeler için büyük bir avantaj sağlar. Örneğin, piyasa analizi yapmak, fiyatları karşılaştırmak, müşteri geri bildirimlerini analiz etmek veya rakip firmaların faaliyetlerini takip etmek gibi birçok amaçla Web Scraping kullanılabilir.
Web Scraping Uygulamaları:
Web Scraping, birçok farklı sektörde kullanılabilir. Örneğin:
- E-ticaret: Ürün fiyatlarını karşılaştırmak, stok durumunu kontrol etmek.
- Finans: Piyasa analizi yapmak, hisse senedi verilerini takip etmek.
- Medya ve Yayıncılık: Haber makaleleri, makale başlıkları ve yazar isimlerini çekmek.
- Sağlık Sektörü: Sağlık istatistikleri, hastalık verileri analiz etmek.
- Eğitim: Akademik verileri, öğrenci değerlendirmelerini toplamak.
Web Scraping Dilleri ve Kütüphaneleri:
Web scraping işlemleri genellikle Python, C#, Java, veya Ruby gibi dillerle gerçekleştirilir. Bu dillerde, Web Scraping için geliştirilmiş birçok kütüphane bulunmaktadır. Örneğin, Python’da Beautiful Soup, Requests, ve Selenium gibi kütüphaneler yaygın olarak kullanılırken, C# dilinde Puppeteer, Iron Web Scraper, Html Agility Pack ve Selenium gibi güçlü kütüphaneler mevcuttur. Bu kütüphaneler, hem statik (sabit) hem de dinamik (değişken) web sitelerinden veri çekme yeteneklerine sahiptir. Günümüzde birçok dil ve kütüphane ile web scraping yapmak mümkün olduğu gibi, bu yazıda odak noktamız C# programlama dilindeki güçlü kütüphane olan Selenium ile Web Scraping yapmak olacaktır.
Selenium Nedir?
Selenium, web tarayıcılarını otomatize etmek için kullanılan bir araçtır. Temelde web uygulamalarını test etmek amacıyla geliştirilmiş olsa da, Web Scraping için de son derece etkili bir şekilde kullanılabilir. Selenium, tarayıcı otomasyonu ve işlem simülasyonu gibi özelliklere sahiptir, bu da dinamik web sitelerinden veri çekmeyi oldukça kolaylaştırır.
C# ve Selenium İle Web Scraping: Profesyonel Veri Çekme Uygulamaları
C# programlama dili, güçlü ve esnek yapısıyla bilinen bir dil olarak, Selenium ile birleştiğinde etkileyici web scraping uygulamalarının kapılarını size açar. Bu güçlü kombinasyon, özellikle siteye giriş yapmanız gereken durumlarda otomatik oturum açma işlemlerini gerçekleştirebilmenize ve ardından istediğiniz verileri doğru bir kod yapısıyla beraber hızla ve doğru bir şekilde çekebilmenize olanak sağlar.
Selenium’un Web Scraping Uygulamalarındaki Değeri:
Selenium, dinamik web sitelerinden veri çekmek istediğinizde oldukça değerli bir araçtır. Örneğin, bir e-ticaret sitesinde belirli bir ürünün stok durumunu anında kontrol etmek veya sosyal medya platformlarında belirli bir hashtag’e ait en son gönderileri çekmek gibi senaryolarda Selenium, büyük bir kolaylık ve güvenilirlik sunar. Ayrıca, kullanıcı oturumu gerektiren sitelere otomatik olarak giriş yapmak ve oturumu sürdürmek için de Selenium’u başarıyla kullanabilirsiniz.
Selenium ve C# İle Web Scraping Yapmanın Avantajları:
- Esneklik ve Özelleştirme: C# ve Selenium ile Web Scraping yapmak, istediğiniz veriyi belirli koşullara ve gereksinimlere göre özelleştirmenize olanak tanır. Bu, çekeceğiniz verilerin kalitesini artırır.
- Otomasyon ve Hız: Selenium’un otomatik tarayıcı kontrolü, Web Scraping işlemlerini otomatikleştirir ve verileri hızla çekmenizi sağlar. Bu, zamanınızı ve çabanızı önemli ölçüde azaltır.
- Doğruluk ve Güvenilirlik: Selenium, web sayfalarını insan benzeri bir şekilde ziyaret eder, bu da doğru ve güvenilir veri çekme işlemlerini mümkün kılar. Böylece, verileriniz güvenilir ve kesin olur.
Selenium Kullanarak Profesyonel Web Scraping Uygulamaları Oluşturma Rehberi
Adım 1: Selenium Kütüphanesini Projeye Eklemek
Selenium’u kullanarak Web Scraping yapmaya başlamadan önce, projenize Selenium WebDriver kütüphanesini eklemeniz gerekmektedir. Bu işlem için Package Manager Console veya NuGet paket yöneticisini kullanabilirsiniz. Package manager console kullanarak yükleme işlemi şu şekildedir:
Yukarıdaki komut, projenize Selenium WebDriver kütüphanesini eklemenize olanak tanımaktadır.
Adım 2: Web Tarayıcısı Sürücüsünü Seçme
Selenium, farklı web tarayıcıları için sürücüler sağlar. Projemizde kullanmak istediğimiz tarayıcıya uygun sürücüyü seçmeliyiz. Örneğin, Chrome tarayıcısını kullanmak istiyorsak, ChromeDriver’ı indirip projemize eklememiz gerekmektedir. Selenium, web siteleri üzerinde otomatik olarak işlem yapabilmemizi sağlayan bir otomasyon aracıdır. Bu işlemi gerçekleştirmek için aşağıdaki adımları takip edebilirsiniz:
- Tarayıcı Sürücüsünü İndirme: Selenium, tarayıcılarla etkileşimde bulunabilmek için özel sürücüler gerektirir. Kullanmak istediğiniz tarayıcı için uygun sürücüyü indirmelisiniz. Örneğin, Chrome tarayıcısı için ChromeDriver’ı
https://sites.google.com/chromium.org/driver/
indirebilirsiniz.
2. Projenize Sürücüyü Eklemek:
İndirdiğiniz sürücü dosyasını projenizin klasör yapısına eklemek için belirli bir düzeni takip etmek önemlidir, özellikle C# gibi derlenen dillerde. Aşağıda, C# projesinde sürücü dosyasını projeye eklemek için adım adım bir yönerge bulunmaktadır:
a. Projenizin Klasör Yapısını Gözden Geçirme:
- C# projesi oluşturduğunuzda, genellikle projenin ana klasöründe bir “bin” klasörü bulunur. Bu klasör, derlenmiş uygulama dosyalarını içerir.
- Derleme sırasında projenizin çalıştığı dizinde bir “debug” veya “release” klasörü oluşturulur. Derleme moduna bağlı olarak bu klasörlerden biri seçilir.
b. Sürücü Dosyasını Eklemek:
- Projenizin ana klasöründe veya derlenmiş uygulamanın bulunduğu “bin/debug” veya “bin/release” gibi ilgili klasörde bir klasör oluşturun. Örneğin, “Drivers” adında bir klasör oluşturabilirsiniz.
- İndirdiğiniz tarayıcı sürücüsü dosyasını bu “Drivers” klasörüne yerleştirin.
string driverPath = @"bin/debug/Drivers";
// Sürücü dosyasının bulunduğu klasör'e bu şekilde yol gösterilebilir.
// Sürücüyü başlatırken ise bu path'i eklememiz gerekmektedir.
IWebDriver driver = new ChromeDriver(driverPath);
Bu adımları takip ederek, C# projesine sürücüyü ekleyebilir ve Selenium’u kullanarak tarayıcı üzerinde otomatik işlemler gerçekleştirebilir hale gelmiş olacağız.
Adım 3: İşlemlerin Belirlenmesi ve Yönetilmesi
Web scraping sürecinde, belirli bir dizi işlemi otomatik ve etkin bir şekilde gerçekleştirmemiz gerekmektedir. Bu aşamada, işlemlerin tanımını ve yönetimini adım adım ele alacağız. Öncelikle, bu işlemlerin API Controller’da değil, daha uygun olan Service katmanında yapılması gerektiğinin altını çizmek önemlidir. API Controller’ın mümkün olduğunca sade ve işlevsel tutulması, yazılımın bakımı ve genişletilmesi açısından avantaj sağlar. Ayrıca, bu işlemler iş mantığına (Business Logic) dahil olduğundan, Service yapısının kullanılması mantıklı ve verimli bir yaklaşım olacaktır.
İşte, web scraping sürecinin aşamaları:
- Web Driver’ın Başlatılması
- Siteye Giriş Yapılması
- Siparişler Sayfasına Gitme
- Excel Dosyasının İndirilmesi
- Excel Dosyasının İşlenmesi
- Veritabanına Kaydetme
- Web Driver’ın Kapatılması
Önemli Not: Web Scraping Sürecinde Element Seçimi ve Araç Kullanımı
Web scraping sürecine başlamadan önce, özellikle Google Chrome gibi modern web tarayıcılarının sağladığı geliştirici araçlarının kullanımının büyük önemi vardır. Bu araçlar içerisinde, ‘İncele’ seçeneği ve ‘Elements’ paneli özellikle kritik rol oynamaktadır. Web scraping işleminde hedeflenen HTML elementlerini doğru bir şekilde tanımlamak ve seçmek için bu araçlar vazgeçilmezdir. Bu makalede, ‘Elements’ panelinin kullanımıyla ilgili derinlemesine bilgiler verilmese de, temel işlevleri ve önemi üzerinde durulacaktır.
Aşağıda, bir web sitesinde kullanıcı bilgilerinin girildiği alanın HTML yapısını nasıl tespit edebileceğinizle ilgili basit bir örnek sunulmaktadır. Bu, web scraping sürecinde, tıklama işlemi gerçekleştirmek istediğimiz butonlar için de benzer bir yaklaşım gerektirir. Bu süreç, özellikle web sitesinin yapısını anlamak ve scraping için hedef elementleri doğru bir şekilde belirlemek açısından kritik öneme sahiptir.
Aşama 1: Web Driver’ın Başlatılması
Web scraping işleminin ilk ve en kritik adımı, Selenium WebDriver’ın başlatılmasıdır. Bu adım, otomatik tarayıcı etkileşimlerinin temelini oluşturur ve scraping sürecinin başlaması için gerekli olan tarayıcı ortamını hazırlar.
private void InitializeWebDriver()
{
var chromeOptions = new ChromeOptions();
// Tarayıcıyı tam ekran modunda başlatılmasını sağlar.
chromeOptions.AddArgument("start-maximized");
// GPU hızlandırmasını devre dışı bırakır.
chromeOptions.AddArgument("disable-gpu");
// Tarayıcı arayüzünü gizler, eğer eklemezsek tarayıcı görünür.
chromeOptions.AddArgument("headless");
_driver = new ChromeDriver(chromeOptions);
}
Not: Yukarıdaki kodda kullanılan headless
argümanı, WebDriver'ın görsel bir tarayıcı arayüzü olmadan çalışmasını sağlar. Bu, özellikle sunucu tabanlı uygulamalarda veya görsel arayüzün gerekmediği durumlarda kullanışlıdır. Eğer bu argüman eklenmezse, WebDriver tarayıcıyı normal bir kullanıcı gibi açar ve tüm işlemleri görsel olarak takip edebilirsiniz. Bu, geliştirme aşamasında hata ayıklama yaparken yararlı olabilir, ancak üretim ortamında kaynak tüketimini azaltmak ve performansı artırmak için genellikle 'headless' mod tercih edilmelidir.
chromeOptions.AddArgument("headless");
Bu aşamada, doğru WebDriver konfigürasyonunun seçilmesi, web scraping işleminin gereksinimlerine ve hedeflerine bağlı olarak önemlidir. Örneğin, hız ve kaynak verimliliği ön planda ise ‘headless’ mod etkili bir seçenek olabilir. Diğer taraftan, işlem sırasında görsel geri bildirim gerekiyorsa, bu modun devre dışı bırakılması tercih edilebilir.
Aşama 2: Siteye Giriş Yapılması
Web scraping sürecinde, kullanıcı kimlik doğrulamasını gerektiren web sitelerine otomatik giriş yapmak, veri toplama işlemlerinin sorunsuz ve etkin bir şekilde gerçekleştirilmesi için kritik bir adımdır. Bu genellikle bir siteden kendi verilerimizi almak istediğimiz durumlarda eğer ilgili site API Endpoint sağlayamıyorsa tercih etmemiz gereken bir işlemdir. Bu aşama, belirli bir web sitesine erişim sağlamak ve bu site üzerinde oturum açmak için gerekli kullanıcı adı ve şifre bilgilerinin doğru ve güvenli bir şekilde girilmesini içerir. İşte bu süreç için temel bir kod örneği:
csharpCopy code
public async Task LoginToSite()
{
// Web sitesine giriş için gerekli olan URL adresi
_driver.Navigate().GoToUrl("https://ornekwebsite.com/giris");
// Kullanıcı adı ve şifrenin girilmesi için gereken HTML elemanlarının bulunması
var userNameField = _driver.FindElement(By.Id("kullaniciAdi"));
var passwordField = _driver.FindElement(By.Id("sifre"));
// Kullanıcı adı ve şifrenin bu alanlara girilmesi
userNameField.SendKeys("ornekKullaniciAdi");
passwordField.SendKeys("ornekSifre");
// Giriş yap butonunun bulunup tıklanması
var loginButton = _driver.FindElement(By.Id("girisYapButonu"));
loginButton.Click();
// Giriş işlemi tamamlandıktan sonra beklenmesi, burada bekleme süresi 2 saniyedir.
await Task.Delay(2000);
}
Not: Bu örnekte, güvenlik nedeniyle gerçek kullanıcı adı ve şifre bilgileri yerine temsili değerler kullanılmıştır. Ayrıca, web sitesi URL’si ve HTML elemanlarının tanımlayıcıları (Id
değerleri) da örnek amaçlıdır. Gerçek bir uygulama geliştirirken, bu bilgilerin doğru ve güvenli bir şekilde saklanması ve kullanılması önemlidir. Oturum açma işlemi, kullanıcıların gizliliğini ve güvenliğini korumak için hassasiyetle gerçekleştirilmelidir.
İlgili HTML elemanlarını tespit etmek için, Google Chrome tarayıcısında sağ tıklayıp ‘İncele’ seçeneğini kullanabiliriz. Bu işlem, ‘Elements’ sekmesinde elemanın HTML kodlarını gösterir ve doğru tanımlayıcıların (ID, sınıf adı vb.) belirlenmesinde yardımcı olur. Bu yöntem, web scraping işlemlerinde hedeflenen verilerin doğru ve etkin bir şekilde çekilmesi için kritik öneme sahiptir.
Aşama 3: Siparişler Sayfasına Gitme:
Bu örneğimizde satış verilerimizi barındıran bir web sitesinden excel verilerimizi alacağız ve onları işleyeceğiz. Kullanıcı girişi başarıyla tamamlandıktan sonra, web scraping sürecinin bir sonraki aşaması, hedeflenen siparişler sayfasına yönlendirilmedir. Bu adım, kullanıcıya özel verilere veya belirli işlevselliklere erişim sağlamak için kritik öneme sahiptir. Bu işlem, genellikle oturum açma işlemi sonrasında, web sitesinin kullanıcıya özgü bölümlerine erişmek için gereklidir. İşte bu süreci gerçekleştirmek için bir kod örneği:
public async Task GoToOrdersPage()
{
// Hedef siparişler sayfasına yönlendirme işlemi için gerekli işlem
_driver.Navigate().GoToUrl("https://ornekwebsite.com/siparislerim");
// Sayfanın tamamen yüklenmesini beklemek için
await Task.Delay(15000); // Örnek olarak 15 saniye bekleniyor
}
Aşama 4: Excel Dosyasının İndirilmesi:
Bu aşamada, web scraping sürecinin önemli bir parçası olarak, ilgili web sitesinden ihtiyaç duyduğumuz Excel verilerini indiriyoruz. Bu işlem, sanki elle indirme yapılıyormuş gibi gerçekleştirilir, böylece web sitesinin doğal kullanıcı etkileşimlerini taklit ederiz. Excel dosyasının indirilmesi, veri toplama sürecinin kritik bir bölümünü oluşturur ve sonraki işleme adımları için gerekli veri setini temin eder. Bu, web scraping sürecinin verimliliğini ve etkinliğini artıran temel bir adımdır.
public async Task<string> DownloadExcelFile()
{
// Dosya indirme seçeneklerinin bulunduğu açılır menüye erişim
var dropdownToggle = await WaitForElement(By.CssSelector(".ornek-btn-dropdown"));
dropdownToggle.Click();
// Menünün açılmasını beklemek
await Task.Delay(10000);
// Excel dosyasının indirme bağlantısını bulmak ve tıklamak
var downloadLink = await WaitForElement(By.Id("excelDosyaIndirmeLinki"));
downloadLink.Click();
// Dosyanın indirilmesini beklemek
await Task.Delay(10000);
// İndirilen dosyaların bulunduğu klasör yolu
string folderPath = @"C:\Kullanici\Indirilenler";
DirectoryInfo directory = new DirectoryInfo(folderPath);
FileInfo[] files = directory.GetFiles("*.xlsx").OrderByDescending(f => f.LastWriteTime).ToArray();
// En son indirilen dosyanın yolunu döndürmek
if (files.Any())
{
return files.First().FullName;
}
return null;
}
Bu kod, belirli bir web sayfasındaki dosya indirme seçeneklerine erişir, Excel dosyasının indirme bağlantısını bulur ve dosyanın indirilmesini sağlar. İndirilen dosyanın konumu ve ismi, sistem ve web sayfası yapısına göre değişebilir, bu nedenle bu örnek genel bir yaklaşımı temsil etmektedir. Gerçek bir uygulama senaryosunda, bu bilgilerin güvenli ve doğru bir şekilde ele alınması gerekmektedir.
Aşama 5 ve 6: Excel Dosyasının İşlenmesi ve Veritabanına Kaydetme
Bu adımda, indirilen Excel dosyası açılır ve içindeki veriler titizlikle işlenir. Bu süreç, verileri analize uygun bir formatta düzenler ve kolay işlenebilir hale getirir.
İşlenen veriler, veritabanına kaydedilerek elde edilen bilgilerin kalıcı olarak saklanması sağlanır. Bu adım, veri bütünlüğünü korur ve güvenli bir saklama ortamı sunar
İşte bu süreci gerçekleştirmek için kullanılan temel bir kod örneği:
public async Task ProcessExcelFile(string filePath)
{
// Excel dosyasının yolu ve bilgilerini içeren nesne oluşturulur.
FileInfo fileInfo = new FileInfo(filePath);
// Excel dosyasını işlemek için paket oluşturuluyor.
using (ExcelPackage package = new ExcelPackage(fileInfo))
{
// Excel paketinin lisans kontekstini ayarlıyoruz.
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
// İlk çalışma sayfasını alıyoruz.
ExcelWorksheet worksheet = package.Workbook.Worksheets[0];
// Çalışma sayfasının korumasını kaldırıyoruz. (eğer varsa)
worksheet.Protection.IsProtected = false;
// Çalışma sayfasındaki toplam satır sayısını alıyoruz.
int rowCount = worksheet.Dimension.Rows;
// İşlenecek verileri saklamak için liste oluşturuluyoruz.
List<VeriModeli> orders = new List<VeriModeli>();
// Sayısal ve tarih verileri için format ve kültür bilgilerini ayarlanıyoruz.
NumberStyles numberStyles = NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands;
CultureInfo cultureInfo = CultureInfo.InvariantCulture;
CultureInfo provider = CultureInfo.InvariantCulture;
string format = "dd.MM.yyyy HH:mm";
// İkinci satırdan başlayarak tüm satırları işlemeye balşlıyoruz.
for (int row = 2; row <= rowCount; row++)
{
// Her bir hücreden alınan verileri uygun formatta işleyip değişkenlere atıyoruz.
string dateValue = worksheet.Cells[row, 3].Value?.ToString();
DateTime orderDate;
if (!string.IsNullOrEmpty(dateValue) && DateTime.TryParseExact(dateValue, format, provider, DateTimeStyles.None, out orderDate))
{
// Tarih başarıyla ayrıştırıldı ve orderDate değişkenine atandığında bu tetiklenecektir.
}
else
{
// Tarih ayrıştırılamazsa varsayılan değer atanacaktır.
orderDate = DateTime.MinValue;
}
// Sipariş oluşturma tarihi ve teslim tarihi için benzer işlemler yapılıyoruz.
string orderCreationDateValue = worksheet.Cells[row, 58].Value?.ToString();
string shippingEndDateValue = worksheet.Cells[row, 59].Value?.ToString();
DateTime orderCreationDate;
DateTime shippingEndDate;
// Sipariş oluşturma tarihi ve teslim tarihinin ayrıştırılması işlemi yapılıyor.
if (!string.IsNullOrEmpty(orderCreationDateValue) &&
DateTime.TryParseExact(orderCreationDateValue, format, provider, DateTimeStyles.None, out orderCreationDate))
{
// Tarih başarıyla ayrıştırıldı ve orderDate değişkenine atandığında bu tetiklenecektir.
}
else
{
orderCreationDate = DateTime.MinValue;
}
if (!string.IsNullOrEmpty(shippingEndDateValue) &&
DateTime.TryParseExact(shippingEndDateValue, format, provider, DateTimeStyles.None, out shippingEndDate))
{
// Tarih başarıyla ayrıştırıldı ve orderDate değişkenine atandı.
}
else
{
shippingEndDate = DateTime.MinValue;
}
// Birim fiyatın ayrıştırılması ve ayarlanması işlemi yapılıyor.
string unitPriceString = worksheet.Cells[row, 41].Value?.ToString();
decimal unitPrice = 0; // Varsayılan değeri önceden 0 olarak ayarlayın
if (!string.IsNullOrEmpty(unitPriceString))
{
unitPriceString = unitPriceString.Replace(".", "").Replace(",", ".");
if (decimal.TryParse(unitPriceString, numberStyles, cultureInfo, out unitPrice))
{
// Ayrıştırma başarılı, unitPrice ayarlandığında tetiklenecek alan.
}
else
{
}
}
// VeriModeli nesnesinin oluşturulması ve tüm bilgilerin atanması b aşamada yapılır.
VeriModeli order = new VeriModeli
{
// Her bir sütun için ilgili verinin atanması bu alanda yapılır.
MarketPlaceName = worksheet.Cells[row, 1].Value?.ToString(),
OrderDate = orderDate,
OrderNo = worksheet.Cells[row, 4].Value?.ToString(),
PackagesNo = worksheet.Cells[row, 5].Value?.ToString(),
CustomerNameofBill = worksheet.Cells[row, 11].Value?.ToString(),
AddressofBill = worksheet.Cells[row, 15].Value?.ToString(),
CountryofBill = worksheet.Cells[row, 16].Value?.ToString(),
CityofBill = worksheet.Cells[row, 17].Value?.ToString(),
CustomerNameofShipping = worksheet.Cells[row, 18].Value?.ToString(),
AddressofShipping = worksheet.Cells[row, 22].Value?.ToString(),
CountryofShipping = worksheet.Cells[row, 23].Value?.ToString(),
CityofShipping = worksheet.Cells[row, 24].Value?.ToString(),
CustomerPhoneNumber = worksheet.Cells[row, 25].Value?.ToString(),
ShippingCompanyName = worksheet.Cells[row, 27].Value?.ToString(),
BarcodeNumberofShipping = worksheet.Cells[row, 28].Value?.ToString(),
OrderSituation = worksheet.Cells[row, 30].Value?.ToString(),
StockCode = worksheet.Cells[row, 31].Value?.ToString(),
ProductName = worksheet.Cells[row, 35].Value?.ToString(),
NumberofProducts = short.Parse(worksheet.Cells[row, 38].Value?.ToString()),
UnitPrice = unitPrice,
VatRate = byte.Parse(worksheet.Cells[row, 40].Value?.ToString()),
UnitDeci = worksheet.Cells[row, 56].Value?.ToString(),
OrderCreationDate = orderCreationDate,
ShippingEndDate = shippingEndDate
};
// Oluşturulan sipariş nesnesini listeye ekliyor.
orders.Add(order);
}
// İşlenen siparişleri veritabanına kaydetme işlemi bu aşamada yapılır.
await SaveToDatabase(orders);
}
}
private async Task SaveToDatabase(List<VeriModeli> orders)
{
foreach (var order in orders)
{
// Context'teki değişiklikleri veritabanına kaydediyor
_context.VeriModeli.Add(order);
}
await _context.SaveChangesAsync();
}
Bu süreç, Excel dosyasındaki verileri analize uygun bir şekilde işler ve sonrasında bu verileri veritabanında kalıcı olarak saklar. Bu işlemler sırasında, veri güvenliği ve bütünlüğünün korunması önceliklidir. Her adım, verilerin doğru ve güvenli bir şekilde işlenmesi ve saklanması için dikkatle planlanmalıdır.
Aşama 7: Web Driver’ın Kapatılması: Tüm işlemler tamamlandıktan sonra, WebDriver’ın düzgün bir şekilde kapatılması önemlidir. Bu işlem, sistem kaynaklarının verimli kullanımını sağlar ve olası hafıza sızıntılarının önüne geçer.
private void DisposeWebDriver()
{
if (_driver != null)
{
_driver.Quit();
_driver.Dispose();
}
}
Önemli Not: Pratik Anlatım İçin Basitleştirilmiş Kod Yapısı
Bu belgede sunulan kod örnekleri, aşamaların daha anlaşılır ve rahat izlenebilir olması için basitleştirilmiş bir yapıda hazırlanmıştır. Okuyucularımızın dikkatine sunmak isterim ki, bu örnekler temel mantığı ve iş akışını göstermek amacıyla oluşturulmuştur ve ‘Clean Code’ prensiplerine tam olarak uymamaktadır. Geliştirme sürecinde kodun daha temiz, sürdürülebilir ve optimize edilmiş hale getirilmesi, her yazılımcının kendi yaratıcılığı ve uzmanlığını gerektiren bir süreçtir. Bu nedenle, saygıdeğer okuyucularımı, sunulan örnekleri kendi projelerine uyarlayarak ve geliştirerek, ‘Clean Code’ ilkelerine uygun bir yapıya dönüştürmeye teşvik ediyorum. Bu süreç, hem kişisel gelişiminizi destekleyecek hem de yazılım kalitesini artıracaktır.
Etik ve Yasal İlkeler:
Web scraping yaparken, hedef web sitesinin kullanım koşullarını saygıyla karşılamak ve veri çekme işlemlerini etik ve yasal sınırlar içinde gerçekleştirmek son derece önemlidir. İzin almanız gereken durumları göz önünde bulundurarak, web scraping işlemlerinizi dürüst, saygılı ve yasal bir şekilde yönetmelisiniz. Hedef web sitesinin robots.txt dosyasını ve kullanım koşullarını inceleyerek, hangi verilere erişebileceğiniz konusunda bilgi sahibi olmalısınız. Ayrıca, veri çekme işlemlerinizin hedef web sitesinin sunucularına aşırı yük bindirmemesine de özen göstermelisiniz.
Sonuç: Profesyonel Web Scraping Uygulamalarıyla İnternet Verilerine Hakim Olun!
C# programlama dili ve Selenium kütüphanesiyle web scraping yapmak, internetin derinliklerindeki verilere erişmenizi sağlayan güçlü bir kombinasyondur. Ancak, bu teknolojileri doğru, etik ve yasal bir şekilde kullanarak, gerçek potansiyelini ortaya çıkarabilirsiniz. Doğru ve güncel verilere hızlıca ulaşmanın güvenilir bir yolunu arıyorsanız, web scraping teknolojisi sizi hedefinize götürebilir.
Bu teknolojiyi kullanırken, etik değerlere uygun hareket etmek ve hukuki izinleri dikkate almak kesinlikle gereklidir. Bu doğrultuda, web scraping işlemleri size bilgiye dayalı kararlar almanızda yardımcı olabilir, rekabet avantajı sağlayabilir ve iş süreçlerinizi optimize edebilir.
Selenium gibi güçlü araçlarla, hem statik hem de dinamik sitelerde veri çekme işlemlerini kolayca gerçekleştirebilirsiniz. Bu teknolojiyi etik değerlere uygun şekilde kullanarak, işiniz için değerli verilere hızla erişmek ve rekabet avantajınızı güçlendirmek için web scraping’i keşfedin! Profesyonel web scraping uygulamalarıyla internetin veri hazinelerini etik ve güvenilir bir şekilde keşfedin!