Categories
Rehber Yazılım

Python Web Scraping Kullanarak İnternetten Veri Nasıl Çekilir?

İnternetten bilgi toplamanın pek çok farklı çeşidi vardır. World Wide Web üzerinden veri toplamak için en popüler iki yöntem API (Applicaiton Programming Interface/Uygulama Programlama Arayüzü) ve Web Scraping (Web Kazıma) dir. Bu iki yöntemin arasındaki temel fark, sunulan verinin muhatabıdır.

Web Scraping vs API Çağrıları

API çağrılarında size verileri rahatça çekip kendi uygulamanızda kullanabilmeniz için end-pointler (uç noktaları) vardır.

Bu end-pointlere çeşitli HTTP/S istekleri göndererek istediğiniz verilere standart bir formatta ( genellikle JSON) ulaşabilirsiniz.

Öte yandan Web Scrapingde veriler bir web sitesinin çalışabilmesi için, websitesi tarafından tarayıcınıza gönderilir, renderlanır ve bu veriler buradan bu web sitesinin üzerinden adeta “kazınarak” toplanır.

Hedef Belirleme

Bu projemiz için n11.com üzerindeki bütün masaüstü bilgisayarların bilgilerini çekeceğiz. Öncelikle yapmanız gereken ilk iş hedefimizi tanımak. İstediğimiz verilerin nerelerde olduğunu belirlemek.

web sitesinde elementin kodu inceleniyor

Burada görebileceğimiz üzere ürünlerimizin hepsi, “column” class’ına sahip birer div ile kaplı. Bu sayede siteden hangi elementleri seçerek başlayacağımızı bulmuş olduk.

Sıradaki işimiz, her bir ürüne ait istediğimiz verileri tutan elementleri bulmak.

yazılmış kodlar inceleniyor

Yine geliştirici konsolumuzun yardımıyla ihtiyacımız olan elementleri belirmiş durumdayız. Bu örneğiniz için ihtiyacımız olan elementler şunlardır.

<h3 class="productName"> // Ürünümüzün adı
<a class="oldPrice"> // Ürünümüzün indirimsiz fiyatı
<a class="newPrice"> // Ürünümüzün indirimli fiyatı
<a class="plink"> // Ürünümüzün sayfasının linki

Fakat ihtiyacımız olan bir element daha var. Bir sayfada sadece belirli bir miktarda ürün listelendiğinden diğer ürünleri görebilmemiz için bir diğer sayfaya geçmemiz gerekiyor.

Bunun için de ürünlerin hemen altında bulunan sayfa butonlarını kullanacağız.sayfa sayıları görünüyor birinci sayfada sayfa sayıları var ellinci sayfada

Resimde de görüldüğü gibi son sayfaya gelene kadar next butonunu kullanabiliriz.

Bu sayede bir sayfadaki ürünleri bitirdiğimizde next butonunu kullanarak bir sonraki sayfaya geçip oradaki ürünleri çekmeye devam edebiliriz.

Gerekli bütün ön taramayı yaptıktan sonra artık kodlama kısmına geçebiliriz.

import requests
from bs4 import BeautifulSoup
import csv

site = requests.get("https://www.n11.com/bilgisayar/masaustu-bilgisayar")

soup = BeautifulSoup(site.content)

with open('laptops.csv', mode='w',encoding='utf-8') as laptops:
    laptopWriter = csv.writer(laptops, delimiter=',')
    laptopWriter.writerow(["Laptop Adı","Eski Fiyatı","Yeni Fiyatı","Link"]

page = soup.find(class_="next")

while page:
    site = requests.get(page["href"])
    soup = BeautifulSoup(site.content)
    products = soup.find_all(class_="column")

    for product in products:
        name = product.find(class_="productName")
        if name:
            name = name.get_text().strip()
            
        else:
            break
        oldPrice = product.find(class_="oldPrice")
        newPrice = product.find(class_="newPrice").get_text().strip()
        if oldPrice:
            oldPrice = oldPrice.get_text().strip()
        else:
            oldPrice = newPrice

        link = product.find(class_="plink")["href"]

        with open('laptops.csv', mode='a',encoding='utf-8') as laptops:
                laptopWriter = csv.writer(laptops, delimiter=',')
                laptopWriter.writerow([name,oldPrice,newPrice,link])
    page = soup.find(class_="next")

Kodumuzun üzerinden gidip ne yaptığına sırayla bir bakalım:


import requests
from bs4 import BeautifulSoup
import csv

Requests modülü sayesinde bir websitesinin raw (ham) HTML halini çekebilriz. Daha sonra bu raw HTML’i BeautifulSoup gibi bir HTML parser’ı kullanarak içerisinden ihtiyacımız olan verileri çıkarabiliriz.

Son olarak da csv modülü sayesinde, topladığımız verileri bir CSV (Comma Seperated Values/Virgülle Ayrılmış Değerler) dosyasına yazıp kullanabiliriz.

site = requests.get("https://www.n11.com/bilgisayar/masaustu-bilgisayar")

soup = BeautifulSoup(site.content)

with open('laptops.csv', mode='w',encoding='utf-8') as laptops:
    laptopWriter = csv.writer(laptops, delimiter=',')
    laptopWriter.writerow(["Laptop Adı","Eski Fiyatı","Yeni Fiyatı","Link"])

page = soup.find(class_="next")

Burada ise masaüstü bilgisayarların olduğu ilk sayfayı requests ile çekip BeautifulSoup ile işlenmeye hazır hale getiriyoruz.

Daha sonra bir CSV dosyası açıp içine başlılarımızı yazıp kapatıyoruz.

Burada dikkat etmemiz gereken bir husus ise Türkçe karakter kullandığımız için dosyayı utf-8 modunda açmamız gerektiğidir.

Aksi takdirde hata alabiliriz. Son olarak, sayfalar arasında ileri gitmemizi sağlayacak olan next butonunu bulup bir değişkene atıyoruz.

while page:
    site = requests.get(page["href"])
    soup = BeautifulSoup(site.content)
    products = soup.find_all(class_="column")

    for product in products:
        name = product.find(class_="productName")
        if name:
            name = name.get_text().strip()
            
        else:
            break
        oldPrice = product.find(class_="oldPrice")
        newPrice = product.find(class_="newPrice").get_text().strip()
        if oldPrice:
            oldPrice = oldPrice.get_text().strip()
        else:
            oldPrice = newPrice

        link = product.find(class_="plink")["href"]

        with open('laptops.csv', mode='a',encoding='utf-8') as laptops:
                laptopWriter = csv.writer(laptops, delimiter=',')
                laptopWriter.writerow([name,oldPrice,newPrice,link])
    page = soup.find(class_="next")

Döngümüzün içinde ilk önce next butonumuzun işaret ettiği sayfayı request ile çekip BeautifulSoup ile işlemeye hazır hale getiriyoruz.

Daha sonra, daha önceden belirlemiş olduğumuz ürün class’ımızı kullanarak bütün ürünlerimizin olduğu elementleri çekiyoruz.

İkinci döngümüzde ise bu ürünlerimizin içerinde teker teker gezip ihtiyacımız olan bilgileri çekiyoruz.

Bir ürünün bütün bilgilerini çektikten sonra en başta açtığımız CSV dosyasını tekrar açıp ekliyoruz.

Burada dikkat etmemiz gereken kısım dosyayı “w” (write/yazma) moduyla değil “a” (append/ekleme) moduyla açmamız gerektiğidir zira daha önce yazdığımız bütün verilerimizin üzerine yazarız.

Son olarak, şu anda ürünlerini çektiğimiz sayfanın next butonunu alıp ilk döngümüze geri dönüyoruz. Bu süreç “page” değişkeni yani next butonumuz boş olana kadar devam edecek.

Bunun olmasının tek yolu sitede en son sayfaya gelmiş olmamızdır.

Sonuç: Örnek Çıktı

Laptop Adı,Eski Fiyatı,Yeni Fiyatı,Link

Dell G5DT-B70W165N i7-10700F 16GB 512GB SSD 6GB GTX 1660 W10H,"12.499,99 TL","11.879,99
                TL",https://urun.n11.com/masaustu-bilgisayar/dell-g5dt-b70w165n-i7-10700f-16gb-512gb-ssd-6gb-gtx-1660-w10h-P469658715

"Zeiron Sn107 İ5-650 3,46Ghz 8GB 120GB SSD 18.5 Masaüstü Bilgisaya","4.450,00 TL","2.249,00
                TL",https://urun.n11.com/masaustu-bilgisayar/zeiron-sn107-i5-650-346ghz-8gb-120gb-ssd-185-masaustu-bilgisaya-P456175492

"Zeiron Sn108 İ5-650 Turbo 3,46Ghz 8GB 500GB 18.5 Masaüstü Bilgisa","4.250,00 TL","2.199,00
                TL",https://urun.n11.com/masaustu-bilgisayar/zeiron-sn108-i5-650-turbo-346ghz-8gb-500gb-185-masaustu-bilgisa-P456176226

"i5 8GB Ram 128GB Ssd 18,5"" Monitör Masaüstü Bilgisayar - EBA TV","2.429,00 TL","2.022,58
                TL",https://urun.n11.com/masaustu-bilgisayar/i5-8gb-ram-128gb-ssd-185-monitor-masaustu-bilgisayar-eba-tv-P368648481

Dragos ATM9922509 i3 10100f 8GB Ram 240GB Ssd 4GB GTX1650 Oyun Bi,"4.650,64
                TL","4.650,64
                TL",https://urun.n11.com/masaustu-bilgisayar/dragos-atm9922509-i3-10100f-8gb-ram-240gb-ssd-4gb-gtx1650-oyun-bi-P463168484

Yukarıdaki küçük pyhon script’imiz sayesinde yaklaşık olarak 4.000 masaüstü bilgisayarın bilgilerini dakikalar içerisinde çekmiş olduk. Yazımızda öğrendiğimiz teknikleri kullanarak bu script’i benzer sitelere uyarlayabilir veya farklı bir web scraping ihtiyacınız için kendi scriptinizi kolaylıkla yazabilirsiniz.

Categories
Proje Yönetimi Rehber

Şirketinizde Kullanabileceğiniz Proje Yönetim Sistemleri

Proje yönetim sistemleri, bir organizasyonun olmazsa olmaz araçlarından biridir. Gerek yazılım projelerinin gerekse pazarlama projelerinin veya düzenin sağlanmasının kritik olduğu projelerin yönetiminde bir proje yönetim sistemi iş yükünüzü büyük oranda azaltacaktır.

Proje yönetim sistemleri uzun yıllardır farklı sektörlerde kullanılan teknikleri bir araya getirip, bunları dijital ortamda önümüze sunan ürünlerdir. Bu sistemlerin ana amacı proje yönetimindeki kritik ve hataya meyilli işlemlerin yönetimini kolaylaştırıp projelerinize daha fazla odaklanmanızı sağlamaktır.

Proje Yönetim Sistemlerinin Faydaları Nelerdir?

Proje yönetim sistemlerinin üç temel yararı vardır; iş takibi, izlenebilirlik ve ekip içi iletişim. İş takibini sağlayarak iş bölümü, görev takibi, performans ölçümü yapılıp detaylı bir şekilde raporlanabilir. Bu raporlar sayesinde projelerinizin gidişatını gözlemleyip, projenin geleceği için tahminlerde bulunabilirsiniz.

İzlenebilirliği sağlamakla görev ve sorumlulukların takibi yapılıp yanlış anlaşılmaların ve aksaklıkların önüne geçilebilir. Proje yönetim sistemlerinin belki de en büyük faydası ise ekip içi iletişimi arttırmasıdır.

Projede görev alan kişiler bir birleriyle doğrudan bir iletişime geçmeden yönetim sistemi üzerinden proje ili ilgili gelişmeleri bir birilerine raporlayıp, projenin akışı bozmadan çalışmaya devam edebilirler.

Hangi Proje Yönetim Sistemi Sizin İçin En Uygundur?

Piyasada alıp kullanabileceğiniz onlarca, yüzlerce farklı proje yönetim sistemleri bulunmaktadır. Ancak, bu kadar çeşitlik beraberinde seçim zorluğunu da getiriyor.

Her bir proje yönetim sisteminin kendine has artı ve eksileri bulunmaktadır. İhtiyacınızı karşılayacak bir ürün bulmak için hepsini karşılaştırmak, projenize harcayabileceğiniz değerli vaktinizden çalacaktır. Bu yüzden, FastnTech sizler için en popüler ve başarılı beş proje yönetim sistemini inceleyip karşılaştırdı.

Jira

Jira 2002 yılında Atlassian tarafından geliştirilmiştir.  Jira ilk geliştirildiğinde hata ayıklama (bug-tracing) ve sorun takibi (issiue tracking) için geliştirilmiş daha sonra, teknik olmayan projeler için proje yönetim sistemi özelliği eklenmiştir. Her ne kadar çekirdeği yazılım projeleri için geliştirilmiş olsa da, Jira her türdeki projeler, orta ve büyük boyuttaki takım yönetimi için uygundur.

Jira Fiyatlandırma

Proje yönetim sistemleri jira fiyatlandırma

Asana

Asana 2008 yılında Facebook’un kurucu ortağı Dustin Moskovitz ve eski Google ve Facebook mühendisi Justin Rosenstein tarafından kurulmuştur. İkiside Facebooktaki çalışanların verimliliğini arttırmak için çalışmalar yapmıştır.

2012 yılında ise ticari olarak faaliyete geçmiştir. Asana piyasadaki en popüler seçeneklerden birisidir.

Takım ve proje yönetimi için ihtiyacınız olan bütün temel aletleri zarif ve kullanıcı dostu bir arayüzle sunmaktadır. Genel proje, orta ve büyük boyuttaki takım yönetimi için uygundur

Asana Fiyatlandırma

proje yönetim sistemleri asana fiyatlandırma

Monday

Monday 2010 yılında İsrailli şirket Wix’in kendi içinde proje yönetimi için geliştirilmiştir. 2012 de Wix eski CEO’su Roy Mann tarafında ayrı bir şirket olarak piyasaya çıkmıştır.

Monday basit ve sade bir arayüze sahiptir. Bunun yanı sıra Monday pek çok çeşitli iş operasyonlarına uyacak şekilde özelleştirilebilir.

Monday ile sadece proje ve takım yönetimi değil aynı zamanda AR-GE, pazarlama, satış, BT, müşteri desteği, İK ve medya üretimi gibi pek çok operasyonu da yürütebilirsiniz. Genel proje, iş, orta ve büyük boyuttaki takım yönetimi için uygundur.

Monday Fiyatlandırma

monday proje yönetim sistemi fiyatlandırma

Trello

Trello, Atlassian’ın bir yan kuruluşu olan web tabanlı bir Kanban tarzı liste yapma uygulamasıdır. İlk olarak 2011 yılında Fog Creek Software tarafından yaratıldı, 2014’te ayrı bir şirketin temelini oluşturdu ve daha sonra Ocak 2017’de Atlassian’a satıldı.

Trello pro plan sunmakla birlikte genel olarak ücretsiz bir proje yönetim sistemidir. Listedeki diğer proje yönetim sistemlerine göre özellik olarak biraz sade kalsa da istediğiniz özellikleri eklentiler olarak entegre edebilirsiniz.

Çok sade ve basit bir arayüze sahip olan Trello genel proje, küçük ve orta boyuttaki takım yönetimi için uygundur.

Trello Fiyatlandırma

trello proje yönetim sistemi fiyatlandırma

YouTrack

YouTrack, JetBrains tarafından geliştirilen tescilli, ticari bir tarayıcı tabanlı hata izleyici, sorun izleme sistemi ve proje yönetim yazılımıdır.

Otomatik tamamlama ile sorgu tabanlı sorun aramaya, toplu işlerde sorunları değiştirmeye, sorun öznitelikleri kümesini özelleştirmeye ve özel iş akışları oluşturmaya odaklanır.

Ara yüzü listedeki diğer proje yönetim sistemlerine göre biraz daha alışmayı gerektirse de, sistemin akışını kavradığınızda karmaşıklığı ortadan kalkmaktadır.

Sorgu sözdizimi özelliği ile kendi ihtiyaçlarınıza göre çok daha ince ayarlamalar yapmanızı sağlaması diğer proje yönetim sistemlerinden ayıran en önemli özelliğidir.

YouTrack Fiyatlandırma

proje yönetim sistemi youtrack fiyatlandırma