STEM

STEM

Bütün Yarasalar Kan Emici midir?

Merhaba, bugün sizlere yarasalardan bahsedeceğim. Yarasalar (O. Chiroptera), memeli hayvanlar grubuna aittir ve uçabilen tek memeli hayvandır. İki yana açılan kanatları 5 adet parmağı ile bacakları arasındaki membran oluşturur. Görsel 1: Pterodactyl, Kuş ve Yarasa kanat anatomisi. Hayvanları, vücut ısılarını koruma şekli olarak endoterm ve ektoderm olarak ikiye ayırabiliriz. Ektoderm hayvanlar, vücut sıcaklıklarını dış ortama göre ayarlarlar. Kuşlar ve memeli hayvanlar dışındaki hayvanlar ektodermdir. Kuşlar ve memeli hayvanların bulunduğu grup olan endotermde ise hayvanlar vücut sıcaklıklarını kontrol eden bir sisteme sahiptir ve vücut sıcaklıkları dış ortamdan bağımsız olarak sabit kalmaktadır. Endoterm hayvanlara örnek olarak kuşlar, kemirgenler ve yarasaları verebiliriz. Torpor nedir? Yarasalar torpor adı verilen bir sisteme sahiptir. Torpor, canlının vücut sıcaklığını homeotermik düzeyden aşağıya düşürmesidir. Uzun süreli torpor ise hibernasyon, yani kış uykusu olarak adlandırılır. Yarasalar da kış uykusuna yatan hayvanlar arasındadır. Peki torpor nasıl işlemektedir? Canlı, torpor sırasında vücut ısısını ortam sıcaklığından sadece 1-2 celcius yüksek bir dereceye düşürür. Aynı zamanda oksijen tüketiminde, nefes alış hızında, kalp atış hızında ve metabolizmasının hızında gözle görülür bir düşüş görülür. Bu sebeple bazı ekstrem koşullarda yaşamsal organlarını korumak için kan akışını sınırlı organlara yönlendirir, bu duruma periferal vazokonstraksiyon adı verilir. Aslında bu durumu bizler de günlük hayatımızda mutlaka yaşamışızdır. Çok soğuk bir havada uzun süre kaldığımızda parmak uçlarımızın üşüdüğünü ve renginin soluklaştığını görürüz. Bu aslında vücudumuzun yaşamsal öneme sahip organlarımızı korumak için kullandığı bir mekanizmadır. Ekolokasyon başlı başına bir yazı konusu olmasına karşın, yarasalardan bahsederken buna da değinmemek olmaz sanırım. Bildiğimiz gibi yarasalar ekolokasyon ile yani ses dalgalarını kullanarak yönlerini ve avlarının yerini bulur. Ancak bilinenin aksine yarasalar kör değildir. Ekolokasyon sırasında yarasa çıkardığı seslerin, çarptığı nesneden geri dönmesi ile ses dalgalarını algılamaktadır. Başka bir yazımızda ekolokasyonu daha derinlemesine inceleyeceğiz. Görsel 2: Yarasa ekolokasyonunu gösteren diagram. Ses dalgalarının küçük bir böcekten geri dönmesi. (Cr: Museum Köenig, Bonn Germany) Yarasaların evrimi ve beslenme biçimi Yarasaların evrimi angiospermlerin, yani tohumlu bitkilerin artışı ile birlikte hızlanmıştır. Bunun sebebi ise bilinenin aksine çoğu yarasanın frugivore (meyve ile beslenme) olmasıdır. Angiospermlerin çeşitlenmesi ile çoğalan böcek popülasyonu da yarasalar için bir diğer besin kaynağı oluşturmuştur. Gün içerisinde beslenen kuşlar ve diğer böcekçillerle rekabetten kaçınmaları sonucunda ise nokturnal (gece aktif) bir yaşam tarzına adapte oldukları düşünülmektedir. Yukarıda bahsettiğimiz gibi çoğu yarasa meyvelerden beslenir. Bunun yanında diyetlerine böcekleri de ekleyen omnivorlar, 3 adet türden oluşan küçük bir grup olan kan emiciler (sanguivory) ve balıkçıl (piscivory) türleri de bulunmaktadır. Kan emici olarak bilinmelerine karşın, sadece çok küçük bir grubu oluşturan 3 adet yarasa türü kan ile beslenmektedir ve boyutları oldukça küçüktür. En büyük yarasalar arasında bulunan ve flying fox ya da fruit bat olarak bilinen tür ise meyve ile beslenen bir yarasa türüdür. Görsel 3: Kan emici bir tür olan Desmodus rotundus. Görsel 4: Balıkçıl bir yarasa. Görsel 5: Nektar ile beslenen bir yarasa. Görsel 6: Flying fox (Uçan tilki) adı da verilen mega bat ailesine ait meyve ile beslenen (furgivore) bir yarasa. Bu yazımızda sizlere yarasaların kış aylarında hibernasyon adı verilen kış uykusuna yattıklarından, çoğu yarasa türünün frugivore ile böcekleri de diyetlerine ekleyen omnivor ve diğer türlerin balıkçıl olduğundan, ancak kan ile beslenmenin sanıldığı kadar yaygın bir özellik olmadığından, nokturnal olma sebeplerinden en önemlisinin adaptasyon sonucu gün içerisindeki diğer böcekçil avcılar ile rekabeti azaltmak olduğundan kısaca bahsettik. Bir sonraki yazımızda farklı konularla tekrar görüşmek üzere.

STEM

Yapay Zeka ve Sağlık Alanındaki Kullanımı

Sağlık alanı insanlık tarihi boyunca gelişim göstermiştir. Zaman ilerledikçe yeni teknolojiler dahil olmuş, yeni tedaviler ve teknikler ortaya çıkmıştır. Bu gelişmeler neticesinde insan ömrü uzamaya ve hastalıklara karşı daha dirençli hale gelmeye başlamıştır. Ortaya farklı ilaçlar çıkmakta ve bu ilaçlar hastalıklar ile savaşmaktadır. Günümüzde ise teknoloji son hızla daha iyi bir konuma gelmektedir. Uzun zamandır teknoloji süreci içinde olan bir kavram mevcuttur: Yapay zeka. Bugün bu yazımızda önce yapay zeka nedir, hangi alanlarda aktif rol almaktadır ve en son sağlık alanında şu ana kadar yaptığı işler nelerdir onlardan bahsedeceğiz. Yapay Zeka Nedir? Genel yaklaşıma göre yapay zeka, insana özgü olan algılama, öğrenme, çoğul kavramları bağlama, düşünme, fikir yürütme ya da fikrini belirtme, sorun çözme, iletişim kurma, çıkarım yapma ve karar verme gibi yüksek bilişsel fonksiyonları veya otonom davranışları sergilemesi beklenen yapay bir işletim sistemidir. Bu sistem aynı zamanda düşüncelerden tepki üretebilmeli ve bu tepkileri fiziksel olarak dışa vurabilmelidir. “Yapay zekâ” kavramının geçmişi modern bilgisayar bilimi kadar eskidir. Fikir babası, “Makineler düşünebilir mi?” sorunsalını ortaya atarak makine zekasını tartışmaya açan Alan Turing’dir. Modern bilgisayarın atası olan bu makineler aslında insan zekasından ilham almıştır. Ancak sonraları, günümüz bilgisayarları daha çok uzman sistemler diyebileceğimiz programlar ile gündelik hayatımızın sorunlarını çözmeye yönelik kullanım alanlarında yaygınlaşmaya başlamıştır. 1970’li yıllarda büyük bilgisayar üreticileri olan Microsoft, Apple, Xerox, IBM gibi şirketler kişisel bilgisayar modeli ile bilgisayarı popüler hale getirdiler. Yapay zekâ çalışmaları ise daha dar bir araştırma çevresi tarafından geliştirilmeye devam etmiştir. Yapay Zeka Kullanım Alanları Eğlence: Gelecek yıllarda evinizde otururken, seçtiğiniz sanal aktörleri içeren özel bir film izlemek isteyebilirsiniz. Gelişmiş tahmin programları sayesinde, bir film senaryosunun hikayesi analiz edilirken, gişe potansiyeli de tahmin edilebilecektir. Siber Güvenlik: Şirketler bilgisayar korsanlarından bir adım önde olmak için mücadele etmektedir. USC uzmanları, yapay zekâ tarafından sağlanan kendi kendine öğrenme ve otomasyon yeteneklerinin, verileri daha sistematik ve uygun fiyatlı bir şekilde koruyabileceğini ve insanları terörizmden veya daha küçük ölçekli kimlik hırsızlığından uzak tutabileceğini belirtmektedir. Yaşamsal Faaliyetler: AI asistanları, yaşları itibariyle birinin yardımına ihtiyaç duyan kişilerin bağımsız olarak yaşamasına ve kendi evlerinde daha uzun süre kalmasına yardımcı olacaktır. Yapay zekâ sistemi evdeki yiyecekleri hazır tutacak, yüksek raflarda bulunan eşyalara güvenli bir şekilde ulaşacak ve kişilerin evindeki hareketlerini her daim kontrol edecektir. Ulaşım: AI’ın yakın zamanda en büyük etkiye sahip olabileceği durum otomobillerdir. İnsanlardan farklı olarak AI sürücüleri; asla radyoya veya telefona bakmamakta, arka koltuktaki çocuklarla tartışmaya girmemektedir. Google sayesinde günümüzde kullanılan otonom araçların 2030 yılına kadar kullanımının daha da artması beklenmektedir. Eğitim: Yapay zekâ ve eğitim teknolojileri, öğrencilerin eksik alanlarını analiz edebilecek ve programı bireye uygun bir şekilde tasarlayabilecektir. Kişiye özel oluşturulan eğitim programı ile öğrencilerin, hem daha verimli olacağı hem de gelecekte işini seven bir birey olarak çevresine yarar sağlayacağı öngörülmektedir. Eğitim yazılımlarını öğrenci ihtiyaçlarına göre kişiselleştiren yapay zekâ, öğrencilerin eksiklerini daha iyi analiz etmekte ve gelişim için kişiye özel destek oluşturmaktadır. Akıllı bilgisayar sistemleri ile desteklenen akıllı veri toplama, günümüzde aktif olarak birçok okul tarafından uygulanan bir işlemdir. Bugün bazı okullar, öğrencilerin gelişim sürecini takip edebilmek ve bu analiz ile öğrencinin performansını artırabilmek için de yapay zekâ teknolojisini kullanmaktadır. Yapay zekanın bazı kullanım alanlarını ele aldık. Daha başka alanlar da mevcuttur. İleride de bu alanlar artacak ve neredeyse her yerde yapay zekayı görmeye başlayacağız. Şimdi ise asıl konumuz olan sağlık alanından bahsedeceğiz. Sağlıkta Yapay Zekâ Sağlık hizmetlerinde yapay zeka, karmaşık tıbbi ve sağlık hizmetleri verilerinin analizinde, insan bilişini taklit etmek için makine öğrenimi algoritmalarını, yazılımlarını veya yapay zekayı tanımlamak için kullanılan kapsamlı bir terimdir. Sağlıkla ilgili AI uygulamalarının ilk amacı, hastalığı önleme veya tedavi teknikleri ile hasta sonuçları arasındaki ilişkileri analiz etmektedir. Tanı süreçleri, tedavi protokolü ve ilaç geliştirme, kişiye özel tıp, hasta izleme ve bakım gibi uygulamalar için yapay zeka programları uygulanmaktadır. AI algoritmaları, hastalığın önlenmesi ve teşhisi için elektronik sağlık kayıtları aracılığıyla büyük miktarda veriyi analiz etmek için de kullanılabilir. IBM ve Google gibi büyük teknoloji şirketleri de sağlık hizmetleri için AI algoritmaları geliştirmiştir. Ayrıca hastaneler maliyeti azaltmak, hasta memnuniyetini artırmak, personel ve iş gücü ihtiyaçlarını karşılamak, girişimleri desteklemek için AI yazılımlarına ihtiyaç duymaktadır. Şu anda, Amerika Birleşik Devletleri sağlık hizmetlerinde yapay zekanın gelişimini ilerletmek için milyarlarca dolar yatırım yapmaktadır. Şirketler, yatılı hasta sayısını ve kalış süresini azaltarak, personel seviyelerini uygun hale getirmektedir. Bu sayede sağlık yöneticilerinin işlerinin iyileştirilmesine yardımcı teknolojiler geliştirilmektedir. Sağlık alanına baktığımızda bazı branşlarda yapay zekanın kullanımı görmekteyiz. Bu alanlardan bazıları şunlardır: Dermatoloji: Dermatoloji, görüntülemesi diğer alanlara göre fazla olan bir uzmanlık alanıdır. Derin öğrenmenin gelişimi görüntü işlemeye güçlü bir şekilde bağlanmıştır. Bu nedenle dermatoloji ile derin öğrenme arasında doğal bir uyum bulunmuştur. Radyoloji: Bilgisayarlı Tomografi (BT) ve Manyetik Rezonans (MR) görüntüleme ile hastalıkları tespit ve teşhis etmek için radyoloji alanında yapay zeka üzerinde çalışılmaktadır. Kuzey Amerika Radyoloji Derneği 24 Şubat 2021 tarihinde radyolojide yapay zekaya odaklanmıştır. Stanford’da yapılan bir çalışmada, hastalarda zatürreyi bu çalışmada gönüllü olarak yer alan radyologlardan daha iyi tespit edebilecek bir algoritma oluşturulmuştur. Onkolojide görüntüleme sayesinde, yapay zeka anormallikleri tespit etmek ve zaman içinde değişimi izlemek için iyi hizmet verebilmiştir. Bunlar onkolojik sağlıkta iki temel faktör olmuştur. Psikiyatri: Psikiyatride AI uygulamaları kavram kanıtlama aşamasındadır. Kanıtların hızla genişlediği alanlar arasında sohbet robotları, insan davranışını taklit eden konuşma aracıları, anksiyete ve depresyon için çalışmalar yer almaktadır. Ayrıca bu alanlar dışında sağlıkta yapay zeka çalışmaları ilerledikçe hastalık teşhisi, hasta kontrolü, ilaç etkileşimlerinin incelenmesi ve hasta kayıt bilgilerinin sisteme otomatik kaydedilme işlerinin de yapay zeka tarafından yapılmaya başlandığı not düşülmüştür. Baktığımızda yapay zeka sağlık alanında baya bir gelişme kaydetmektedir. İlerleyen süreçlerde göreceğiz ki sadece yapay zeka değil ayrıca robotik sistemler de daha aktif olacak ve tıp alanında büyük gelişmeler yaşanacaktır. Kaynakça: 1- https://hbr.org/2016/01/algorithms-need-managers-too 2- https://fortune.com/longform/ibm-watson-health-business-strategy/ 3- https://www.techtarget.com/searchhealthit/feature/Predictive-analytics-in-healthcare-helps-improve-OR-utilization 4- https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7211783/ 5- https://dermnetnz.org/topics/image-acquisition-in-dermatology 6- https://www.jmir.org/2019/10/e16356/ 7- https://www.ijoms.com/article/S0901-5027(18)30299-6/fulltext 8- https://www.yapayzekatr.com/2020/01/06/yapay-zeka-ve-kullanim-alanlari/  

STEM

TypeScript: JavaScript Temelli Bir Uzantı Dili

Selamlar, bu seride TypeScript hakkında yazıyor olacağım. Serinin bu ilk yazısında ise TypeScript’e giriş yapacak ve JavaScript ile TypeScript’in farklarından bahsedeceğim. Nedir Bu TypeScript? TypeScript, kısaca JavaScript’in tamamını ve fazlasını içeren bir uzantı dilidir. Aynı zamanda biz geliştiricilere oldukça kolaylık ve avantaj sağlayan bir yazım standartıdır. Bu avantajlardan ve kolaylıklardan bahsetmeden önce TypeScript hakkında biraz bilgi sahibi olalım.   TypeScript’e Neden İhtiyaç Duyarız? JavaScript yaygın olarak web uygulamalarında kullanılan bir dildir. Zamanla sunucu taraflı uygulamalarda ve mobil uygulama geliştirmede kullanılmaya başlamıştır ve tahmin edilemeyen bir büyüme göstermiştir. Bu büyüme ile bazı iyileştirmelere ihtiyaç duyulmuştur. TypeScript, JavaScript’e üstünlük sağlayan iyileştirmeler içerir ve JavaScript’i büyük projelerde daha etkili bi şekilde kullanmak için tasarlanmıştır. Birçok JavaScript uygulaması, yüz binlerce dosyadan oluşan uygulamalar oluşturur. Tek bir dosyada yapılacak tek bir değişiklik, gölete bir çakıl taşı atmak ve dalgaların kıyıya yayılmasına neden olmak gibi herhangi bir sayıda başka dosyanın davranışını etkileyebilir. Geliştiricinin projesinin her bölümü arasındaki bağlantıları doğrulamak zaman alabilir. TypeScript gibi tip kontrollü bir dil kullanmak, bunu otomatik olarak giderir ve geliştirme sırasında anında geri bildirim sağlar. Bu özellikler, TypeScript’in biz geliştiricilerin kodlarına daha fazla güvenmelerine yardımcı olur ve projenin yanlışlıkla bozulmadığını doğrulamak için önemli ölçüde zaman tasarrufu sağlar. TypeScript’in JavaScript’e göre avantajlarının listesi şu şekilde; TypeScript hataları geliştirme sırasında ortaya çıkarır. Bu özellik runtime dediğimiz aşamada meydana gelen hataların olasılığını azaltır. TypeScript; generics, inheritance, interfaces, classes vb. nesne yönelimli türdeki çeşitli programlama kavramlarını destekler. TypeScript’in bir özelliği, statik yazmayı etkinleştirmesidir. Statik yazma, derleme aşamasında tür doğruluğunun kontrol edilmesini sağlar. JavaScript’te bu mümkün değildir. Burada ufak bir parantez açıp static ve dynamic typing konusuna kısaca değinmek istiyorum. Static Typing: Bir geliştiricinin değişkenleri kullanmadan önce o değişkenin tipini açıkça belirtmesi gereken bir yazım türüdür. Bu yazım türünde, compile aşamasında hataları görüp düzeltme şansımız olduğundan daha az hata üreten programlar yazarız. Aynı zamanda tip kontrolü önceden yapılır, bu da kodun daha az hafıza kullanarak daha hızlı çalışmasını sağlar. Static yazım kullanan dillere örnek olarak TypeScript, Java, C, C++ dillerini verebiliriz. Dynamic Typing: Değişken tiplerini belirleme zorunluluğumuzun olmadığı bir yazım şeklidir. Değişkenin tipini değiştirmek istediğimizde değiştirebiliriz. Bu özellik geliştiriciye oldukça esnek bir ortam sağlar. Bu yazım türünün static yazıma göre dezavantajı, hataları program çalıştıktan sonra görüyor olmamızdır. Şimdiye kadar TypeScript’in ne olduğundan ve JavaScript ile farklılıklarının bi kısmından bahsettik. Daha iyi anlaşılması için bu farklılıkları tablo biçiminde açıklamakta fayda var. TypeScript vs JavaScript Bu yazı ile TypeScript’e ufak bir giriş yapmış olduk. Serinin ikinci yazısında TypeScript nasıl çalışır buna bakacağız. Görüşmek üzere.  

STEM

TI (Texas Instruments) LaunchPad ile MSP430 Programlama – ADC

Merhaba, serimizin bu yazısında çevre birimlerinden ADC (Analog Digital Converter) ne olduğunu anlatıp CSS programı ile örnek uygulama yazacağız. Bu serimizde MSP340 mikrodenetleyicisini programlayarak çevre birimlerini öğreniyoruz. Serinin önceki yazılarına göz atmak isterseniz linklere tıklayıp okuyabilirsiniz. TI (Texas Instruments ) LaunchPad ile MSP430 Mikrodenetleyicisi Programlamaya Giriş TI (Texas Instruments ) LaunchPad ile MSP430 Programlama – GPIO TI (Texas Instruments ) LaunchPad ile MSP430 Programlama – INTERRUPT

STEM

TI (Texas Instruments) LaunchPad ile MSP430 Programlama – INTERRUPT

Merhaba, bu serimizin bu yazısında çevre birimlerinden interrupt’ın (Kesme) ne olduğunu anlatıp CSS programı ile örnek uygulama yazacağız. Bu serimizde MSP340 mikrodenetleyicisini programlayarak çevre birimlerini öğreniyoruz. Önceki yazılara göz atmak isterseniz linklere tıklayıp okuyabilirsiniz. TI (Texas Instruments ) LaunchPad ile MSP430 Mikrodenetleyicisi Programlamaya Giriş TI (Texas Instruments ) LaunchPad ile MSP430 Programlama – GPIO

STEM

Android Programlamaya Giriş: Bir Uygulamanın Anatomisi

Herkese merhabalar, bildiğiniz üzere son yazımızla birlikte Kotlin serimizi noktalamıştık. Bugün ise yeni bir seriye başlıyoruz. Artık uzun bir süre Android programlama üzerine konuşuyor olacağız. Basit bir Android projesi üç kısımdan oluşur. Bunlar activity’ler, uygulama kaynakları ve gradle dosyalarıdır. Bunları kısaca şöyle tanımlayabiliriz: Activity Activity’ler kullanıcı girdisini işleyerek ekranda bir sayfa yapısı oluşturur. Bu sayfa yapısında kullanıcı arayüzü (user interface) görüntülenir. Her activity’nin kendine ait bir yaşam döngüsü vardır. Buna ileriki yazılarda değineceğiz. Resources Kaynak dosyalarının içinde resimler, sesler temalar, renkler ve benzeri dosyalar tutulur. Gradle Gradle bir build tool yani bir inşa aracıdır. Bu dosyalar uygulamanın geliştirme aşamalarını yapılandırmamızı sağlar. Diğer bir deyişle uygulamamızın bir cihaza yüklenebilmesi için gerekli kontrolleri sağlayan bir komut dosyasıdır. Proje Yapısı Bir Android projesi oluşturmak istediğimizi varsayalım. Bilgisayarınızda Android Studio’ya girdiniz ve yeni bir proje oluşturdunuz. Projeyi oluşturduğunuz anda Android Studio size şu şekilde bir proje yapısı oluşturur: MyApplication ├── app │   ├── libs │   └── src │       ├── androidTest │       ├── main │       │   ├── java │       │   ├── res │       │   └── AndroidManifest.xml │       └── test ├── build.gradle └── gradlew Şimdi kısaca dosya ve dizinleri tanıyalım. app Uygulama için kullanılacak kaynak kodları, testleri ve diğer kaynakları depolar. libs Uygulamanın bağlı olduğu local kütüphaneler burada depolanır. androidTest (Instrumentation) Android framework’ü ile gerçek anlamda etkileşime girmesi gereken sınıfların testi için Instrumentation Test yapılması gerekir. main Java ve Kotlin app dosyaları burada bulunur. test (Unit Test) Android framework’ünden bağımsız olan sınıfları/metodları test etmek için kullanılır. Robolectric ve JUnit popüler unit test araçlarıdır. AndroidManifest.xml Uygulamaya ait tüm temel bilgiler, işlevler ve gereksinimler bu dosyada tutulur. Proje oluşturulduğunda default olarak proje yapısına eklenir. Dosyanın xml formatında olması makine ve kullanıcı tarafından okunabilirlik sağlar. Dosyanın görünümü şu şekildedir: Bu dosya içinde yönetebileceğimiz bazı özelliklerden bahsedelim. Uygulamanın adını ve temasını değiştirebiliriz. Version numaraları, kütüphaneler ve SDK sürümlerinde değişiklik yapabiliriz. Uygulama izinlerini kontrol edebiliriz. Activity’leri yönetebiliriz. Açılışta ilk tetiklenen Activity’i ayarlayabiliriz. Uygulamanın iconlarını yönetebiliriz. 3. parti SDK’lerin ayarlarını yönetebiliriz. Build.gradle Gradle dosyaları project module ve app module olmak üzere iki tanedir. Build.gradle (project module) Modüllere yapılan tüm yapılandırmalar bu dosya içinde yönetilir ve gradle versiyon kontrolü bu dosyada yapılır. Build.gradle (app module) Proje için yapılandırma ayarları bu dosyada yapılır. Uygulama sürümü, kütüphaneler ve benzeri diğer özellikler bu dosyadan okunabilir. Gradle içeriğine göz atalım. CompileSdkVersion Uygulamanın derleneceği API düzeyini belirtir. Bu değerden daha yüksek değerli API özellikleri uygulama içinde desteklenmez. buildToolVersion Derleyicinin sürümü burada gösterilir. Gradle plugin 3.0.0’dan itibaren bu alan isteğe bağlıdır. Belirtilmediği takdirde Android SDK build tools’un en son indirilen sürümü kullanılır. defaultConfig Uygulamanın tüm derleme sürümlerine, örneğin debug ve release, uygulanacak seçenekleri içerir. applicationId Uygulamanın tanımlayıcısı niteliğindedir. Uygulamanın Play Store’da başarıyla yayınlanması ve güncellenmesi için eşsiz olması gerekmektedir. minSdkVersion Desteklenen en düşük API seviyesini gösterir. targetSdkVersion Uygulamanın test edileceği maksimum API düzeyini belirtir. versionCode Uygulamanın sürümünü belirten sayısal bir değerdir. versionName Kullanıcıya gösterilen string bir değerdir. dependencies Modül için gereken tüm bağımlılıkları içerir. Gradlew Gradle’ı çalıştırmak için yürütülen bir dosyadır.   Bu yazıda kısaca bir Android projesinin yapısını, dosyaları ve dizinleri görmüş olduk. Gelecek yazıda ise Layout’lardan bahsedeceğiz. Sonraki yazıda görüşmek üzere.  

STEM

Python İle Web Scraping: Twitter Botu Oluşturma

Merhaba, Yazı serimizin önceki bölümlerinde farklı senaryolarda Web Scraping yaparken nasıl bir yaklaşım sergilememiz gerektiğine yönelik örnekler incelemiştik. Gözden kaçırdıysanız önceki yazılara göz atabilirsiniz. Python ile Web Scraping: Temeller Python İle Web Scraping: E-Ticaret Sitesinden Web Scraping Bu sefer ise Web Scraping ile beslenen bir twitter botu oluşturacağız. İzleyeceğimiz senaryoda SistersLab blog yazılarının yayınlandığı sayfayı inceleyeceğiz. Bu sayfaya yeni bir blog yazısı eklendiğinde bu yazının bilgilerinin yer aldığı bir tweetin otomatik olarak atılmasını sağlayacağız.  Bunun için web sayfada blog duyuru sayfasından listelenen blogların html taglarını inceleyecek ve gerekli kontroller sonrasında yeni bir blog yazısını tweet olarak paylaşılması için gerekli Python fonksiyonlarını oluşturacağız. Bu uygulamada bir ek gereksinim var: Twitter developer hesabı Tweepy kütüphanesi ile tweetlerin Python tarafından yollanması için gerekli Öncelikle web sayfada “öğeyi denetle” deyip sayfa içeriğindeki blog yazılarının html olarak karşılık geldiği tagları buluyoruz. Siteye baktığımızda her bir blog yazısı için bir çerçeve içerisinde bilgiler paylaşıldığını görüyoruz; blog yazısının kapak fotoğrafı , yazı başlığı ve blog yazısının giriş cümlesi. Bu bilgileri web sayfa içerisinde görebiliyorsak bu bilgiler html içerisinde de bulunuyor demektir. Onun için html kısmında bu çerçevenin öğelerini de bulmamız gerekiyor. Html içerisinde belirli bir içeriği bulmanın en kolay yolu “Ctrl + F” tuş kombinasyonu ile anahtar kelimeleri aramaktır. Mesela üstteki “Herkese merhabalar. Kotlin” kısmını sayfanın html içeriği içerisinde aradığımda direkt olarak ilgili kısmın taglarına ulaşmış oldum. Burada tagları incelediğimizde ön yüzde gördüğümüz gibi çerçevedeki kapak fotoğrafının yer aldığı “img”, blog url’inin yer aldığı “a” tagının ve blog giriş cümlelerini barındıran kısmın yer aldığını görebiliyoruz. Kodlama kısmına geçmeden önce hedeflerimizi belirlememiz gerekiyor. Bu sayfadan 3 bilgi çekmek istiyoruz. Blog kapak fotoğrafı, Blog yazısının url’i, Blog yazısının özet / giriş cümlesi. Bu kısımlara ulaşmak için taglarda derinleşmemiz ve bu tagların barındırdığı class bilgilerini de kodumuza eklememiz gerekiyor. Mesela; Giriş cümlesi bir “div” tagı içerisinde ve “entry-description” classına sahip. Yazar görseli “img” class’ının src özelliğinde url olarak tutuluyor. Ve aslında bu img class’ı aynı zamanda bir “a” tag’ının içerisinde yer alıyor. Aynı zamanda img tag’ı da “post-tumbnail” adlı class’a sahip bir div içerisinde yer alıyor. Burada farklı bir yaklaşım sergilemek, iç içe bir yapı kurmak gerekecek. Blog url’lerine baktığımızda ise yine zincirleme bir şekilde “content-inner” classlı bir div içerisinde bir a tag’ı içerisinde olduğunu görüyoruz blog url’lerinin. Adımları uygulamak için uygulamamıza başlıyoruz. Her zamanki gibi ilk önce get_soup() olarak adlandırdığımız fonksiyon ile sayfanın html içeriğini Python’a çekiyoruz. Sonrasında blog yazısının url’i, blog giriş cümlesi ve yazı başlık fotoğrafını aşağıdaki gibi çekiyoruz. Evet Bu verileri elde etmek geçen örneklerden biraz farklı olsa da bu şekilde. Peki twitter botuna bunu nasıl çevireceğiz? Öncelikle Python ile tweet atabilmek için bir twitter developer account’a sahip olmak gerekiyor. Bu şekilde tweepy kütüphanesi yardımı ile developer account token’ımızı kullanarak Python’la tweetler atabiliyoruz. Tweepy ile tweet atmanın örnek kullanımı ise bu kadar kolay: Şimdi, son part olan Twitter ve scrape ettiğimiz dataların birleştirilmesi aşamasındayız. Fakat bizim amacımız burada blog yazılarını tweet attırmak değil, “yeni yayınlanan blog yazılarını tweet attırmak”. SistersLab ekibinde içeriden aldığım bilgilere göre haftada bir kaç blog yazısı paylaşılabiliyor ve günde bir kez siteyi “yeni bir blog yazısı paylaşıldı mı?” diye kontrol etmemiz yeterli. Bunun için bir while döngüsü içerisinde blog duyuru sayfasında paylaşılmış blog yazılarını kaydedeceğiz ve 24 saat sonra tekrar paylaşılmış blog yazılarını kontrol edip eğer yeni bir yazı ağımıza düşmüş ise bu yazının bilgilerini paylaşacağız. Botumuzun pseudo kodu ise şu şekilde olacak: Aslında şimdiye kadar gerekli bütün aşamaları konuştuk. Geriye kalan bu bahsettiklerimizi doğru sıralama ve mantık ile Python dilinde kodlamakta. Burada kod parçasını mantığı ön plana çıkartır şekilde paylaşacağım fakat çalışır kodu ve yardımcı adımlara/paketlere GitHub reposundan ulaşabileceksiniz. Evet botumuzun son halini oluşturduk. Burada ortaya çıkan yapı aslında önceki adımların bir araya getirilmesi sadece. Akıllara takılabilecek birkaç kısmı da açıklamakta fayda var. Mesela 36. satırda (280 – 23) ifadesi şu sebeple; “Tweetlerde paylaşılan url’ler 23 karakter yer kaplıyor ve tweetimizde url’e yer açmak için bunu hesaba katarak giriş cümlelerini daraltmamız gerekebiliyor.”. Diğer bir konu da 24 * 60 * 60 = 1 günlük bekleme doğru bir yaklaşım mı? Bu aslında senaryonuza göre değişir, bu şekilde botu çalıştırmak mümkün fakat bir workflow aracı ile oozie vea airflow ile python scriptinizi schedule edebilir ve bu şekilde bir ifade kullanmaya gerek duymayabilirsiniz. Burada amaç basit bir şekilde konsepti aktarmaktı. Son olarak tweetlerimiz! Program çalıştığında ilk olarak blog duyuru sayfasındaki 6 blog yazısının tweeti otomatik olarak atılacak. Çünkü ilk başta önceki günde kaydedilmiş eski url listesi boş olduğu için tüm blog yazıları botumuz tarafından yeni yazılar olarak algılanacak. Fakat ilk çalışmadan 24 saat sonra artık botumuz sağlıklı bir şekilde sadece yeni eklenen blogların bilgilerini paylaşıyor olacak. Tweetin altında yazan “bilative” twitter developer account tarafında oluşturulmuş uygulama adıdır. Burada manuel telefon ile attığınız tweetlerin dışında developer accountunuzun ismini görüyor olacaksınız. 3 parçada işlediğimiz Python ile Web Scraping konulu blog serimizin sonuna geldik. Sizlere bu yazı dizisinde basit örnekler ile akıllarda bir fikir oluşmasını ve kurcalanabilir kod parçacıkları sunmayı hedefledik. Farklı senaryolar ve gereksinimler için ayrıntılı çalışmalar ve ara ara hatalar da yapmanız gerekecektir. Hata yapa yapa öğrenmek keyifli, umarım sizler için de öyledir. Yazı serimizin içeriği veya Web Scraping konusu ile ilgili aklınıza takılan, sorun yaşadığınız veya desteğe ihtiyacınız olursa da iletişime geçebilirsiniz. Sonraki yazı serisinde görüşmek üzere.

STEM

Mini Important Person: Cookies

Çerezler önemli bir tarayıcı özelliğidir – çerezleri devre dışı bırakırsanız, web sitelerine giriş yapamazsınız. Çerezlerin önemli, iyi kullanımları olsa da, daha şüpheli kullanımları da vardır. Cookie’ler herhangi bir internet deneyiminin önemli bir parçasıdır. Cookie’ler aynı zamanda HTTP Cookie, Web Cookie, Internet Cookie ya da Browser Cookie olarak farklı isimlerle adlandırılabilirler. Fakat hepsinin çıktığı tek bir nokta vardır o da website etkinliğinin izlemenin bir yolu olduğudur. Cookie’ler çok yaygın bir kullanıma sahiptir, muhtemelen şu an da bilgisayarınızda yüzlerce hatta binlerce depolanmış cookie bulunmaktadır. Peki nedir bu Cookie’ler gerçekten bir kurabiye kadar tatlı ve keyif verir mi bizlere? Cookie’ler, genellikle sabit sürücüde bulunan ve tarayıcıdaki oturumlarla ilgili bilgileri depolayan bir dosyadır. Çerezler yani Cookie’ler yalnızca metin parçaları içerirler. Bu metin parçaları bir kullanıcı kimliği, oturum kimliği veya başka kişisel bir metin olabilir. Cookie’ler web sitesine yapılan ziyaretlerin ve websitesinde yapılan etkinliklerin kaydını tutmak ve tekrar ihtiyacımız olduğunda bizelere hatırlatmak için tasarlanmıştır. Bu işlem şu şekilde gerçekleşir: Kullanıcı herhangi bir web sitesini ziyaret ettiğinde, kullanıcı web sunucusu küçük bir veri paketini cihazınızın browser’ına aktarır ve böylelikle bilgisayar tanımlama verisi oluşmuş olur. Cookie’ler, tarayıcıda tutulan metin dosyalarını web sitesinin kendisinin veya web sitesinin tarayıcısının kullanıcı verilerini toplamasına ve kişiselleştirme ve izleme gibi kullanıcıya özel özellikleri etkinleştirmesine olanak tanır. Web siteleri genellikle bir kullanıcının yeni mi yoksa sık ziyaret eden biri mi olduğunu öğrenmek için Cookie’leri kullanır. Cookie’ler web sitelerine yardımcı olurken, kullanıcı deneyimini de geliştirirler. Örneğin, bir web sitesinde bazı tercihler kaydederseniz bunlar cihazınızda saklanan çerezlere kaydedilir. Cookie’ler sayesinde herhangi bir web sitesini ziyaret ettiğinizde bilgisayarınızda sakladığınız küçük bilgi paketleri aynı websitesini tekrar ziyaret ettiğinizde kullanmış olduğunuz tarayıcı bu küçük bilgileri o web sitesine göndererek, sitenin sizi tanımasını sağlar. Sizinle ilgili bazı faydalı bilgilerin tutulduğu bu küçük bilgi paketleri sitenin sizi tanıması, daha kolay ve hızlı işlem yapmanız için tasarlanmıştır. Örneğin; online bir kitapçıdan sipariş etmiş olduğunuz kitapları, yazarları search ettiğiniz konu başlıklarını kaydederek aynı online kitapçıda tekrar işlem yapmak istediğinizde tarayıcınız kitapçının sitesinin tanımlama bilgisini okumasına izin verir ve site daha sonra aynı yazarları, kitapları ya da ilgili konuları, kitap listelerini derleyerek size gösterir. Bu aktiviteler arka planda kullanıcıya görünmeden gerçekleşen eylemlerdir. Eğer kullanıcı tercihleri, bilgisayarda bir cookie depolandığında herhangi bir notification gönderecek şekilde ayarlanmadıysa, kullanıcının Cookie’lerin çalışmasından herhangi bir haberi olmaz, yani önceden kullandığınız bir web sitesine tekrar döndüğünüzde Cookie’lerin kullanıldığından haberiniz olmaz. Tanımlama bilgileri, web sitelerinin web sitenizin etkinliğiyle ilgili bilgileri hatırlaması için tasarlanmış küçük kod parçalarıdır.Bilgisayar tanımlama bilgileri, web veya web sitesi tanımlama bilgileri, İnternet tanımlama bilgileri, tarayıcı tanımlama bilgileri veya daha resmi olarak HTTP tanımlama bilgileri olarak da adlandırılır. Cookie’lerdeki tanımlama bilgisinin asıl amacı kullanıcıları tanımlayarak özelleştirilmiş web sayfalarını kullanıcı özelinde hazırlamak ve bilgilerini kaydetmektir. Burada tanımlama bilgisi olarak ifade ettiğimiz kavram, bir web sunucusu tarafından bir web tarayıcısına verilen bir mesaj türünü tanımlamak için kullanılan terimdir. Web sayfalarını hazırlamak ve site oturum bilgilerini (kullanıcı bilgilerini, kullanıcı tercihlerini, şifre hatırlama seçeneklerini vb. saklamaktır.) kaydetmek için kullanılır. Çerezler hakkında bilmeniz gereken birkaç gerçek: Çerezler alana özgüdür. Yani bir alan, başka bir alan tarafından oluşturulan bir çerezi okuyamaz veya bu çereze yazamaz. Bu, güvenlik amacıyla tarayıcı tarafından yapılır. Çerezler tarayıcıya özeldir. Her tarayıcı, çerezleri farklı bir konumda saklar. Çerezler tarayıcıya özeldir ve bu nedenle bir tarayıcıda (ör. Google Chrome’da) oluşturulan bir çereze başka bir tarayıcı (Internet Explorer/Firefox) tarafından erişilemez. Tarayıcıların çoğu, tanımlama bilgilerini metin dosyalarında açık metin olarak saklar. Bu nedenle, hiç güvenli değildir ve çerezlerde hiçbir hassas bilgi saklanmamalıdır. Tarayıcıların çoğu, çerezlerde saklanan metnin uzunluğuyla ilgili kısıtlamalara sahiptir. Genel olarak 4096(4kb)’dir ancak tarayıcıdan tarayıcıya değişebilir. Bazı tarayıcılar, her etki alanı tarafından saklanan çerez sayısını (20 çerez) sınırlar. Sınır aşılırsa yeni çerezler eski çerezlerin yerini alacaktır. Çerezler, kullanıcı tarafından tarayıcı özellikleri kullanılarak devre dışı bırakılabilir. Bu nedenle, kullanıcıların çerez ayarları üzerinde kontrolünüz yoksa (örneğin intranet uygulaması için) çerez kullanılmamalıdır. Çerez adları büyük/küçük harfe duyarlıdır. Örneğin; KullanıcıAdı, kullanıcı adından farklı. Çerezlerin kendilerine iletilebilecek altı parametresi vardır: Çerezin adı. Çerezin değeri. Çerezin sona erme tarihi – Çerezin tarayıcınızda ne kadar süre aktif kalacağını belirler. Tanımlama bilgisinin geçerli olduğu yol – Tanımlama bilgisinin geçerli olduğu URL yolunu belirler. Bu yolun dışındaki web sayfaları tanımlama bilgisini kullanamaz. Çerezin geçerli olduğu alan adı – Bir site bir etki alanında birden çok sunucu kullandığında, çerezin herhangi bir sunucudaki sayfalar tarafından erişilebilir olmasını sağlar. Güvenli bağlantı ihtiyacı – Tanımlama bilgisinin yalnızca SSL kullanan bir site gibi güvenli bir sunucu koşulu altında kullanılabileceğini gösterir. Cookie’lerin tarihçesini ise şu şekilde özetleyebiliriz; 1994: Daha sonra Netscape Communications olacak olan şirketin çalışanı Lou Montulli, “sihirli çerezler”den sonra çerez takma adını verdiği “kalıcı istemci durumu nesnesini” icat etti. 1996: The Financial Times’daki “Bilgisayarınızdaki Bu Hata Akıllı Bir Tanımlama Bilgisidir” başlıklı bir makale, kamuoyunu tanımlama bilgilerinin varlığı konusunda uyardı. 1997: İki yıllık bir çalışmanın ardından, İnternet Mühendisliği Görev Gücü (IETF), üçüncü taraf tanımlama bilgilerinin kullanımını desteklemeyen tanımlama bilgisi kullanımı için ilk standardı belirledi. 2002: Avrupa Birliği e-Gizlilik Yönergesi, kullanıcıların çerezleri reddetmesini gerektiren ilk büyük gizlilik yasasıydı. 2017: Apple, tarayıcısı Safari’de izleme amacıyla üçüncü taraf tanımlama bilgilerinin kullanımını engellemeye başladı. 2018: Avrupa Birliği, reklamcıların üçüncü taraf çerezleri yerleştirmek için kullanıcıların onayını almasını gerektiren Genel Veri Koruma Yönetmeliğini (GDPR) uygulamaya koydu. 2019: Mozilla, tarayıcısı Mozilla Firefox’ta üçüncü taraf izleyicilerden gelen çerezleri engelleyeceğini duyurdu. 2019: Google, 2023 yılına kadar Chrome tarayıcısında üçüncü taraf çerez desteğinin aşamalı olarak kaldırılmasını içeren Privacy Sandbox girişimini başlattı. Cookie’ler web sitelerinin bizlere ait bir çok özel bilgiyi, web sitenizin oturum açma bilgilerini, alışveriş sepetlerini ve daha fazlasını hatırlamasını sağlar. Cookie’lerin çoğu tamamen güvenli olsa da bazıları sizin izniniz olmadan sizi izlemek için kullanılabilir. Bu nedenle Cookie’ler suçluların tüm özel bilgilerinizi gözetlediği özel bilgi hazine haline dönüşebilir. Çevrimiçi gizliliğinizi korumak çok zor olabilir. Neyse ki, temel bir tanımlama bilgisi bile istenmeyen gözleri Cookie’ler sayesinde internet etkinliğinizden uzak tutmanıza yardımcı olabilir. Cookie’lerin çalışma prensiplerini ise şu şekilde özetleyebiliriz; Bir çerezde saklanan veriler bağlantınız üzerine sunucu tarafından oluşturulur. Bu veriler size ve bilgisayarınıza özel bir kimlikle etiketlenir. Çerez, bilgisayarınız ve ağ sunucusu arasında değiş tokuş edildiğinde sunucu kimliği okur ve size özel olarak hangi bilgileri sunacağını bilir. Yeni bir web sitesini her ziyaret ettiğinizde web sitesi tarayıcınıza unique tanımlayıcılara sahip bilgisayar tanımlama bilgileri gönderir.

STEM

TI (Texas Instruments) LaunchPad ile MSP430 Programlama – GPIO

Merhaba, bu seriye TI (Texas Instruments ) LaunchPad ile MSP430 Mikrodenetleyicisi Programlamaya Giriş  ile giriş yapmıştık.  Bir önceki yazıya göz atmak isterseniz linke tıklayıp okuyabilirsiniz. Serimizin bu yazısında çevre birimlerinden GPIO ne olduğuna anlatıp, CCS programıyla ilk kodumuzu yazacağız. Ardından led yakıp söndüreceğiz.  Bir programlama dili öğrenmeye başlarken yaptığımız ilk uygulama ekrana “hello world” ya da “merhaba dünya” yazısı yazdırmaktır. Gömülü programlamaya başlarken ilk yaptığımız uygulama “blinky” veya “led blink” yani led yakıp söndürmektir. Unutmayın, elektronikte de her şey led yakmayla başlar.

STEM

Python İle Web Scraping: E-Ticaret Sitesinden Web Scraping

Merhaba, Python ile Web Scraping yazı serimizin 2. bölümündeyiz. İlk bölümde basit örnekler ile tek web sayfası içerisindeki tablo verilerinin nasıl kayıt altına alınabileceğine değinmiştik. İlk yazıyı gözden kaçırdıysanız bir göz atabilirsiniz: Python ile Web Scraping: Temeller Bu bölümde ise her e-ticaret sitesinde gördüğümüz üzere sayfalar boyunca listelenmiş ürünler ve bu ürünlerin detay bilgilerine ulaşmaya çalışacağız ve bu bilgileri toplu bir şekilde veri seti olarak toplayacağız. Örneğimizi görsel ile işlemek daha sağlıklı olacaktır. Her e-ticaret sitesinde karşılaştığımız üzere mesela telefonlar kategorisine girdiğimizde sayfalar boyunca telefonların listelendiğini görüyoruz. Her bir ürünün (telefon, bilgisayar vb) bilgilerini detaylı görmek için tıkladığımızda ise ürün bilgileri karşımıza sıralanıyor. Burada her bir telefonun bilgilerini kayıt altına almak istediğimizi varsayarsak; üstteki şemada her sayfada 9 ürün olduğu ve telefon kategorisinin 7 sayfa devam ettiği bu durumda 7 * 9 = 63 telefonun bilgilerinden oluşan veri seti oluşturabiliriz. Bu veri setini ödevlerimizde, projelerimizde veya analizlerimizde kullanmamız mümkün olacaktır. Böyle bir uygulama detaylı bir ön çalışma gerektiriyor. 63 telefonun da ürün sayfasına gidip tek tek içeriklere ulaşmak bir çözüm gibi durabilir fakat 63 ürünün linklerine ulaşmaya zaman ayırmak efektif değil. Kaldı ki 3000 telefon listeleniyorsa web sayfa boyunca 3000 linke tek tek ulaşmak mümkün olmayacaktır. Bunun için madde madde izlememiz gereken yol şu şekilde: Öncelikle ürün listesi sayfalarının linklerine ulaşmalıyız. İlk sayfanın linkini biz vereceğiz fakat sonraki sayfaların da linklerine sayfa içerisinden ulaşabilmeliyiz. Altta yer alan 1-2-3-4… şeklinde sıradaki sayfaya geçiş butonları sonraki sayfaların url’lerini saklıyor. Sayfada listelenen her ürünün “ürün detayı sayfası” linkine ulaşmamız gerekiyor. Her sayfanın url’i listeli sayfada gizlidir. Ardından ürün detaylarının toplanması gerekmektedir. Her bir ürünü bir tablonun tek 1 satırı olarak özellikleri ile birlikte kaydetmeliyiz. Bir örnek üzerinde senaryo ve adımların gereklilikleri çok daha iyi anlaşılacaktır. Uygulama aşamasında önceden hazırlamış olduğumuz https://bilative.github.io/sisterslab/page_1.html web sayfası üzerinden çalışmamızı yürüteceğiz. Uygulamaya başlamadan önce sayfayı bir incelemelisiniz. Linkte listelenen ürünler bulunuyor ve ürünlere tıkladığımızda detay sayfalarına ulaşabiliyoruz, aynı zamanda sonraki sayfalara geçiş yapabiliyor ve o sayfalarda listelenen ürünleri de inceleyebiliyor, detay bilgilerine ulaşabiliyoruz. Çalışmada kullanılacak tüm kodlara ise GitHub linkinden ulaşabilirsiniz.     İlk sayfa linkinde tarayıcıda “sayfa kaynağını görüntüle” seçeneği ile html içeriğini görüntülediğimizde sonraki sayfaların linklerinin listelendiği kısmı bulabiliriz. Bu html taglarını ve classlarını incelediğimizde beautiful soup ile alınacak web içeriğinin “a” tagında ve “class = pagination__content” şeklinde filtrelenmesi gerektiğini fark ediyoruz. Yani burada listelenen sayfa linklerine ulaşmak için gerekli olan python kodumuz şöyle olacak. Başarılı bir şekilde sayfa linklerine ulaşabildik. Şimdi de her bir sayfadaki listelenen ürünlerin linklerine ihtiyacımız var. Ürün sayfaları linklerinin ise “class = urun-adi” özelliğine sahip a tagları içerisinde olduğunu görebiliyoruz. Aslında önceki işlemlerin tekrarı sayılabilir bu aşama, sadece bu sefer 1 “get_soup” işlemi yapmayacağız, her 5 web sayfasına da ayrı ayrı get_soup ile içeriklerine ulaşma adımını yapacağız. Bu işlemler sırasında yine ürün linklerini bir liste içerisinde biriktireceğiz. Buraya kadar 2 parça halinde: İlk olarak tüm sayfaların url’lerine ulaştık. Ve sayfalar içerisinde listelenen ürünlerin linklerini kayıt altına aldık. Sadece başlangıç sayfası url’ini dışarıdan programımıza bildirip 5 farklı sayfa ve 20 ürünün linkine ulaştık. Böyle bakınca dışarıdan müdehalemiz sadece başlangıç noktasını belirlerken oldu. 300 web sayfası olsaydı teorik olarak 300 * 4 = 1200 ürün linkine dışardan müdehalesiz ulaşmış olacaktık. Şimdi sırada elimizde linkleri bulunan bu 20 ürün özelliklerini alıp bir dataframede toplamak var. Bir ön inceleme sonrası tüm ürünlerin aynı özelliklerinin listelendiği (Ürün Adı, Rengi, Dayanıklılığı…) fakat aldıkları değerlerin değişkenlik gösterdiği fark ediliyor. Bu da aslında tablolarda tuttuğumuz yapılandırılmış veri örneği. Ürün sayfalarının html taglarını incelediğimizde değişken isimlerinin “th” etiketlerinde tutulduğunu ve alınan değerlerin ise “td” etkiketlerinde yer aldığını görebiliyoruz. (Bütün html tag incelemelerine “öğeyi denetle seçeneği” ile ulaşabiliriz.) Bu şekilde doğru kolon isimlerini barındıran boş bir dataframe oluşturmuş oluyoruz (shape = 0 x 10). Sırasıyla bütün ürün sayfalarını gezip/kazıyıp td etiketlerinde yer alan değişken değerleri ile dataframe satırlarını doldurmak kalıyor geriye. Hemen her web sayfada üzerine biraz çalışma ile benzer uygulamalar yapılabilir. Buradaki bölümde basit bir örnek ile çoklu sayfalar ve geçişlerde nasıl web kazıma yöntemini efektif kullanabileceğimize değindik. Bu örnekler için kullanılan web sayfaları herhangi bir site değil de kendi oluşturduğum tasarımlar üzerinden anlatma sebebim ise olabildiğince basit ve standard bir örnek ortaya koyabilmekti. Web scraping’de derinleştikçe dikkat etmeniz gereken bazı konulara değinmek gerekirse: Web scraping’e direkt girişmeden önce hedef web sitelerinde ön çalışmalar yapmak gerekmektedir. Her farklı web site farklı bileşenlerden oluşmakta ve farklı isimlendirmeler ile özellik atamalarını yapmaktadır. Her bir tekil sayfaya istek atmadan önce veya sonra 0.5 sn civarı bir bekleme (time.sleep(0.5)) bırakmak site kaynaklarını yormanızı önleyecektir. Aksi halde çok seri bir şekilde attığınız istekler site tarafından bir saldırı olarak algılanabilir ve siteye erişiminiz engellenebilir. Çoğu web sayfadaki datalar standarttan çok uzak ve kirlidir. Mesela bir ürün bilgisi 1000GB, biri 1T, bir diğeri ise 1TB olarak girilmiş olabiliyor bilgiler, Web sayfalarda sonraki sayfa linkleri her zaman sıralı bir şekilde verilmez, farklı yaklaşımlar sergilenmesi gerekir. Farklı senaryolar farklı zorluklarla yüzleşmenizi sağlayacaktır. Takıldığınız bir yer olduğunda veya zorlu bir görevle karşılaştığınızda iletişime geçmekten çekinmeyin. Sonraki yazımızda web scraping görevini bir twitter botu ile birleştireceğiz, görüşmek üzere.

Scroll to Top