Web Scraping With Python

Mehmet Buğra Kara
4 min readMar 23, 2024

--

Merhaba herkese, umarım iyisinizdir. Bugün sizlerle bloomberght sitesinde bulunan haber içeriklerini web kazıma (web scraping) yöntemleri ile nasıl kazıyabileceğimizi inceleyeceğiz. Öncelikle cevaplandıracağımız sorular şunlardır; Nedir bu web scraping? Nasıl Yapılır? Faydaları Nelerdir? Bu soruları cevaplandırdıktan sonra pratik bir örnek ile yazımı sonlandıracağım. Hadi o zaman başlayalım!

Daha fazla içeriğe ve kodlara ulaşmak için GitHub linkimi ziyaret edebilirsiniz.

  1. Web Scraping Nedir?

Web scraping, internet üzerindeki verileri otomatik olarak çekme işlemidir. Bu süreç, bir web sitesinin HTML yapısını tarayarak belirli verileri çıkarmaya denir. Yani, web scraping sayesinde belirlediğimiz bir web sitesinden istediğimiz verileri otomatik olarak çekebiliriz.

2. Web Scraping Nasıl Yapılır?

Web scraping çeşitli programlarla gerçekleştirilebilir. Bunların en popülerleri BeautifulSoup, Urlib, requests ve Selenium’dur. Web scraping işlemi için öncelikle web sitesine bir request gönderilmeli ve bu request’ten gelen HTML kodları BeautifulSoup veya diğer kütüphanelerle işlenebilir hale dönüştürülmelidir. Daha sonra, bu HTML yapısı içerisinde istediğimiz verilere ulaşmak için XPath veya CSS gibi seçiciler kullanabiliriz. Bu seçiciler sayesinde belirli HTML elementlerini seçebilir ve içerdikleri verilere erişebiliriz.

3. Web Scraping Faydaları?

Büyüyen ve gelişen teknolojinin sayesinde günümüzde verilere ulaşmak nispeten daha kolay olsa da spesifik analizlerimiz için kendi verilerimizi elde etmek zorunda kalabiliyoruz. Tam burada imdadımıza web kazıma yöntemleri yetişiyor. Web kazıma ile kendi veri setlerimizi oluşturabilir ve istediğimiz analizlerimizi gerçekleştirebiliriz. Örneğin, bloomberght sitesinden finansal haber verilerini çekerek bu verileri analiz edebilir ve yatırım kararlarımızı destekleyebiliriz. Ayrıca, web scraping sayesinde rakip analizi yapabilir, pazar araştırmaları gerçekleştirebilir ve otomatik içerik oluşturma süreçlerini hızlandırabiliriz.

Kodlamaya geçmeden önce kütüphanelerimizi tanıyalım. Bu projede urllib ve BeautifulSoup kütüphanelerini kullanacağız. Peki nedir bu kütüphaneler biraz yakından inceleyelim.

  1. Urllib

Python’da URL işlemleri için kullanılan bir kütüphanedir. İçindeki alt modüllerle, web sayfalarına erişim sağlamak, veri alışverişi yapmak ve URL’leri manipüle etmek için kullanılır.

urllib.request: URL'ler üzerindeki verilere erişmek için kullanılır. Web sayfalarını açmak, veri indirmek gibi işlemleri gerçekleştirir.

2. BeautifulSoup

HTML ve XML dosyalarını işlemek için geliştirilmiştir. Web sayfalarından veri almak için HTML veya XML belgelerini ayrıştırmak ve bu belgelerdeki verilere erişmek için kullanılır.

Kısaca kütüphanelerimizi özetlediğimize göre kodlamaya geçebiliriz.

Öncelikle kütüphanelerimizi import ediyoruz.

from bs4 import BeautifulSoup
from urllib.request import urlopen

Urllib.reqeuest üzerinden urlopen fonksiyonun kullanarak ilgili web sitesine bir HTTP GET isteği gönderilir ve sunucudan gelen yanıtı urlopen metodu ile okunur.

url = urlopen("https://www.bloomberght.com/sisecamdan-114-milyon-dolarlik-yatirim-2348590").read()

Oluşturulmuş olduğumuz bu ‘url’ değişkenini BeautifulSoup kullanarak ayrıştırıyoruz. Bu ayrıştırma işlemi için ‘html.parser’ modülü kullanıyoruz.

soup = BeautifulSoup(url, 'html.parser')

Bu işlemin ardında ilgili web sitesine giderek elde etmek istediğimiz verilerin HTML ögelerini inceliyoruz. Bu projede haberin metin içeriği ile birlikte haberin başlığı ve haberin yayınlanma tarihini de çekmek istiyoruz. Bu işlemleri gerçekleştirmek için öncelikle bu içeriklerin HTML ögesinde hangi sınıflarda olduğu ve sınıf tag’lerini tespit etmemiz gerekiyor. Bunu yapmak için haber içeriğinden herhangi bir bölümü seçim mause dan sağ tıklayarak açılan pencereden inceleye tıklıyoruz.

Daha sonra ekranın sağ köşesinde açılan pencereden HTML ögelerini inceliyoruz. Burada bizim içeriklerimiz div etiketi ile news-item sınıfının içinde olduğunu tespit ediyoruz. Bu sınıfı elde etmek için pars ettiğimiz ve ve soup değişkenine atadımız url’den için bu class’ı buluyoruz.

container_link = soup.find('div', class_="news-item")

Oluşturmuş olduğumuz bu yeni container_link değişkeni ile haber içeriklerine, haber başlığına ve haberin yayın tarihine erişebiliriz. Yine aynı şekilde HTMl ögelerinden haberin yayınlanma tarihinin ise span etiketi ile date sınıfında olduğunu ve haber başlığınında h1 etiketi ile title sınıfında olduğunu tespit ediyoruz. Bu container_link değişkeni ile bu sınıfları buluyoruz ve bu sınıflardaki değerleri text formatinde çekiyoruz.

news_date = container_link.find('span', class_="date").text.split('\n')[1]
news_title = container_link.find('h1', class_="title").text.split('\n')[1]

Haber içeriklerinin article etiket ile content sınıfında p ögeleri içinde olduğunu tespit ettik bu p ögeleri birden fazla olduğu için basit bir döngü yardımı ile elde ediyoruz.

p_tags = container_link.find('article', class_="content")('p')
text_list = [p.get_text(strip=True) for p in p_tags]
news_content = '\n'.join(text_list)

İşte bu kadar basit bir şekilde bir haber sitesinden haber içeriklerini çekebilirsiniz.

Bu konuda daha fazla bilgi edinmek için web scraping çalışması için yapmış olduğum Youtube videosuna bu linkten ulaşabilirsiniz.

DİKKAT!!

Web scraping her ne kadar işlerimizi kolaylaştırıyorsa da veri sahiplerinin izni olmadan yapıldığında ciddi etik sorunlar ve yasal zorluklar ortaya çıkabilir. Bir web sitesinin kullanım koşullarını ihlal etmek veya kişisel verileri izinsiz olarak toplamak, hukuki sonuçlar doğurabilir. Bu nedenle, web scraping yaparken ilgili yasalara ve etik kurallara dikkat etmek önemlidir.

--

--