karanlık proxyscrape logo

Yeni Başlayanlar İçin Web Kazıma: Python Kullanarak Temel Bilgiler ve Çerçeve

Python, Kazıma, Mar-01-20215 dakika okuma

Web kazıma, bir web sitesinden otomatik ve iyi yapılandırılmış bir biçimde veri çıkarma sanatıdır. Excel, CSV ve çok daha fazlası gibi veri kazıma için farklı formatlar olabilir. Web kazımanın bazı pratik kullanım alanları pazar araştırması, fiyat izleme, fiyat istihbaratı, pazar araştırması ve potansiyel müşteri oluşturmadır. Web kazıma, kamuya açık verilerden en iyi şekilde yararlanmak ve daha akıllı kararlar almak için etkili bir tekniktir. Bu nedenle, herkesin web kazımanın en azından temellerini bilmesi ondan faydalanmak için harikadır.

Bu makale, Python'un Beautiful Soup adlı çerçevesi ile oynayarak web kazıma temellerini ele alacaktır. Kodlama ortamımız olarak Google Colab 'ı kullanacağız.

Python Kullanarak Web Kazıma İşleminde Kullanılan Adımlar

  1. Öncelikle, kazımak istediğimiz web sayfasını belirlememiz ve bu URL'ye bir HTTP isteği göndermemiz gerekir. Yanıt olarak sunucu web sayfasının HTML içeriğini döndürür. Bu görev için, python isteklerini işlemek üzere üçüncü taraf bir HTTP kütüphanesi kullanacağız.
  2. HTML içeriğine erişimde başarılı olduktan sonra, asıl görev verilerin ayrıştırılmasına gelir. HTML verilerinin çoğu iç içe geçtiğinden, verileri yalnızca dize işleme yoluyla işleyemeyiz. İşte bu noktada ayrıştırıcı devreye girer ve HTML verilerinin iç içe geçmiş ağaç yapısını oluşturur. En gelişmiş HTML ayrıştırıcı kütüphanelerinden biri html5lib'dir.
  3. Daha sonra, ayrıştırma ağacında gezinmeyi ve aramayı içeren ağaç geçişi gelir. Bu amaçla Beautiful Soup (üçüncü taraf bir python kütüphanesi) kullanacağız. Bu Python kütüphanesi HTML ve XML dosyalarından veri çekmek için kullanılır.

Şimdi web kazıma sürecinin nasıl işlediğini gördük. Kodlamaya başlayalım,

Adım1: Üçüncü Taraf Kütüphanelerin Kurulması

Çoğu durumda, Colab zaten yüklü üçüncü taraf paketleriyle birlikte gelir. Ancak yine de import ifadeleriniz çalışmıyorsa, aşağıdaki komutları kullanarak birkaç paket yükleyerek bu sorunu çözebilirsiniz, 

pip yükleme istekleri
pip html5lib yükleyin 
pip install bs4
Adım2: Web Sayfasından HTML İçeriğine Erişim
i̇thalat talepleri̇ 
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
print(r.content)

Formun çıktısını görüntüleyecektir,

Bu kod parçasını anlamaya çalışalım,

  1. Kodun ilk satırında, requests kütüphanesini içe aktarıyoruz.
  2. Daha sonra kazımak istediğimiz web sayfasının URL'sini belirtiyoruz.
  3. Üçüncü kod satırında, HTTP isteğini belirtilen URL'ye gönderir ve sunucunun yanıtını r adlı bir nesneye kaydederiz.
  4. Son olarak print(r.content) web sayfasının ham HTML içeriğini döndürür.
Adım3: HTML İçeriğinin Ayrıştırılması
i̇thalat talepleri̇ 
from bs4 import BeautifulSoup 
  
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
  
soup = BeautifulSoup(r.content, 'html5lib') # Bu satır bir hataya neden olursa, 'pip install html5lib ' komutunu çalıştırın veya html5lib'i yükleyin 
print(soup.prettify())
Çıktı:

Çok uzun bir çıktı verir; ekran görüntülerinden bazıları aşağıya eklenmiştir.

Beautiful Soup ile ilgili en güzel şeylerden biri, Beautiful Soap'un nesnesinin ve ayrıştırıcı kütüphanesinin aynı anda oluşturulmasına izin veren html5lib, html.parse, lxml vb. gibi HTML ayrıştırma kütüphaneleri üzerine inşa edilmiş olmasıdır. 

Yukarıdaki kodda, iki argüman geçirerek Beautiful Soup nesnesini oluşturduk:

r.content: Ham HTML içeriği.
html5lib: Kullanmak istediğimiz HTML ayrıştırıcısını belirtir.

Son olarak, soup.prettify() yazdırılarak ham HTML içeriğinden ayrıştırma ağacının görsel temsili elde edilir.

Adım4: Ayrıştırma ağacında arama ve gezinme

Şimdi sıra HTML içeriğinden bazı yararlı verileri çıkarmaya geldi. Çorba nesneleri, daha sonra programlı olarak çıkarılabilecek iç içe geçmiş yapı biçimindeki verileri içerir. Bizim durumumuzda, bazı alıntılardan oluşan bir web sayfasını kazıyoruz. Bu yüzden bu alıntıları çözen bir program oluşturacağız. Kod aşağıda verilmiştir,

#Python program to scrape website  
#and save quotes from website 
import requests 
from bs4 import BeautifulSoup 
import csv 
   
URL = "http://www.values.com/inspirational-quotes"
r = requests.get(URL) 
   
soup = BeautifulSoup(r.content, 'html5lib') 
   
quotes=[]  # a list to store quotes 
   
table = soup.find('div', attrs = {'id':'all_quotes'})  
   
for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)

Daha ileri gitmeden önce, soup.prettify() yöntemini kullanarak yazdırdığımız web sayfasının HTML içeriğini gözden geçirmeniz ve alıntılara gitmek için bir kalıp bulmaya çalışmanız önerilir.

Şimdi yukarıdaki kodda bunu nasıl yaptığımızı açıklayacağım, 

Tırnak işaretleri arasında gezinirsek, tüm tırnak işaretlerinin id'si 'all_quotes' olan bir div konteynerinin içinde olduğunu görürüz. Bu yüzden find() metodunu kullanarak bu div elemanını (kodda tablo olarak adlandırılır) buluruz:

table = soup.find('div', attrs = {'id':'all_quotes'})

Bu işlevdeki ilk bağımsız değişken, aranması gereken HTML etiketidir. İkinci argüman, bu etiketle ilişkili ek nitelikleri belirtmek için sözlük tipi bir öğedir. find() yöntemi ilk eşleşen öğeyi döndürür. Bu kod parçasının ne yaptığını daha iyi hissetmek için table.prettify() denenebilir.

Eğer tablo elemanına odaklanırsak, div konteyneri sınıfı quote olan her bir alıntıyı içerir. Bu yüzden sınıfı quote olan her div konteyneri boyunca döngü yapacağız.

Burada findAll() yöntemi çok kullanışlıdır, argümanlar söz konusu olduğunda find() yöntemine benzer, ancak en büyük fark, eşleşen tüm öğelerin bir listesini döndürmesidir. 

Row adında bir değişken kullanarak her bir alıntıyı yineliyoruz.

Daha iyi anlamak için bir HTML satır içeriği örneğini analiz edelim:

Şimdi aşağıdaki kod parçasını düşünün:

for row in table.findAll('div', attrs = {'class':'col-6 col-lg-3 text-center margin-30px-bottom sm-margin-30px-top'}): 
    quote = {} 
    quote['theme'] = row.h5.text 
    quote['url'] = row.a['href'] 
    quote['img'] = row.img['src'] 
    quote['lines'] = row.img['alt'].split(" #")[0] 
    quote['author'] = row.img['alt'].split(" #")[1] 
    quotes.append(quote) 
   
filename = 'inspirational_quotes.csv'
with open(filename, 'w', newline='') as f: 
    w = csv.DictWriter(f,['theme','url','img','lines','author']) 
    w.writeheader() 
    for quote in quotes:
        w.writerow(quote)
Burada bir alıntı hakkındaki tüm bilgileri kaydetmek için bir sözlük oluşturuyoruz. İç içe geçmiş yapıya erişmek için nokta gösterimi kullanılır. HTML öğesinin içindeki metne erişmek için .text kullanırız:

Ayrıca, etiketin niteliklerini ekleyebilir, kaldırabilir, değiştirebilir ve bunlara erişebiliriz. Bunu, etiketi bir sözlük olarak ele alarak yaptık:

quote['url'] = row.a['href']
Ardından tüm tırnak işaretlerini tırnak işaretleri adlı listeye ekledik. 

Son olarak, verilerimizi kaydetmek için kullanılacak bir CSV dosyası oluşturacağız.

filename = 'inspirational_quotes.csv'

Dosyamıza inspirational_qoutes.csv adını verdik ve tüm alıntıları gelecekte de kullanmak üzere kaydettik. İşte inspirational_quotes.csv dosyamızın nasıl göründüğü,

Yukarıdaki çıktıda sadece üç satır gösterdik, ancak gerçekte 33 satır var. Yani bu, sadece basit bir deneme yaparak web sayfasından önemli miktarda veri çıkardığımız anlamına gelir. 

Not: Bazı durumlarda, web kazıma yasadışı olarak kabul edilir ve bu da IP adresinizin web sitesi tarafından kalıcı olarak engellenmesine neden olabilir. Bu nedenle dikkatli olmanız ve yalnızca buna izin veren web sitelerini ve web sayfalarını kazımanız gerekir. 

Neden Web Kazıma Kullanılmalı?

Web kazımanın büyük ölçüde kullanılabileceği gerçek dünya senaryolarından bazıları şunlardır,

Kurşun Üretimi
Çoğu işletme için kritik satış faaliyetlerinden biri potansiyel müşteri oluşturmaktır. Bir Hubspot raporuna göre, trafik ve potansiyel müşteri oluşturmak, gelen pazarlamacıların %61'inin bir numaralı önceliğidir. Web kazıma, pazarlamacıların internet üzerindeki yapılandırılmış müşteri adayı listelerine erişmesini sağlayarak bu konuda bir rol oynayabilir.
Pazar Araştırması 

Doğru pazar araştırması yapmak, yürüyen her işin en önemli unsurudur ve bu nedenle son derece doğru bilgiler gerektirir. Pazar analizi, farklı boyut ve şekillerde olabilen yüksek hacimli, yüksek kaliteli ve son derece anlayışlı web kazıma ile beslenmektedir. Bu veriler, iş zekası gerçekleştirmek için çok faydalı bir araç olabilir. Pazar araştırmasının ana odak noktası aşağıdaki iş yönleridir:

  • Pazar eğilimlerini analiz etmek için kullanılabilir.
  • Piyasa fiyatını tahmin etmemize yardımcı olabilir.
  • Giriş noktalarının müşteri ihtiyaçlarına göre optimize edilmesini sağlar.
  • Rakiplerin izlenmesinde çok yardımcı olabilir.
Liste Oluştur

Web kazıma, örneğin gayrimenkuller ve e-ticaret mağazaları gibi işletme türlerine göre listeler oluşturmak için çok kullanışlı ve verimli bir teknik olabilir. Bir web kazıma aracı, işletmenin mağazasındaki rakip ürünlerin binlerce listesine göz atmasına ve fiyatlandırma, ürün ayrıntıları, varyantlar ve incelemeler gibi gerekli tüm bilgileri toplamasına yardımcı olabilir. Bu işlem yalnızca birkaç saat içinde yapılabilir ve bu da kişinin kendi listelerini oluşturmasına ve böylece müşteri taleplerine daha fazla odaklanmasına yardımcı olabilir.

Bilgileri Karşılaştırın

Web kazıma, çeşitli işletmelerin bilgi toplayıp karşılaştırmasına ve bu verileri anlamlı bir şekilde sunmasına yardımcı olur. Çeşitli diğer web sitelerinden incelemeleri, özellikleri ve tüm temel ayrıntıları çıkaran fiyat karşılaştırma web sitelerini düşünelim. Bu ayrıntılar derlenebilir ve kolay erişim için uyarlanabilir. Böylece alıcı belirli bir ürünü aradığında farklı perakendecilerden bir liste oluşturulabilir. Dolayısıyla web kazıma, tüketici talebine göre çeşitli ürün analizleri göstererek tüketici için karar verme sürecini çok daha kolay hale getirecektir.

Toplu Bilgi

Web kazıma, bilgilerin bir araya getirilmesine ve kullanıcıya düzenli bir biçimde gösterilmesine yardımcı olabilir. Haber toplayıcıları örneğini ele alalım. Web kazıma aşağıdaki şekillerde kullanılacaktır,

  1. Web kazıma yöntemini kullanarak en doğru ve ilgili makaleler toplanabilir.
  2. Yararlı videolar ve makaleler için bağlantılar toplamaya yardımcı olabilir.
  3. Haberlere göre zaman çizelgeleri oluşturun.
  4. Haber okuyucularına göre trendleri yakalayın.

Bu makalede, pratik bir kullanım örneğini göz önünde bulundurarak web kazımanın nasıl çalıştığına dair derinlemesine bir analiz yaptık. Ayrıca Python'da basit bir web kazıyıcı oluşturmak için çok basit bir alıştırma yaptık. Artık istediğiniz herhangi bir web sitesini kazıyabilirsiniz. Ayrıca, web kazımanın önemli bir rol oynayabileceği bazı gerçek dünya senaryolarını da gördük. Umarız makaleyi beğenmişsinizdir ve her şey açık, ilginç ve anlaşılır olmuştur.  

Web kazıma projeleriniz için harika proxy hizmetleri arıyorsanız, şu adrese bakmayı unutmayın ProxyScrape konut ve prim vekilleri.