web scrape cover nasıl yapılır

Web scrape yapmayı öğrenmek iyi bir fikir mi? Yüzlerce saatlik çalışmadan tasarruf etmek istiyorsanız, o zaman yapmalısınız. Ayrıca, bir programcı olarak sahip olunması gereken harika bir beceridir.

Web scraping, web sitelerinden veri çıkarma işlemidir ve veri her yerde mevcut olduğundan, temel ve ileri tekniklere hakim olarak bu verilere ulaşabilir ve etkili bir şekilde işleyebilirsiniz. 

Web sitesi yapısını anlamaktan, temel tekniklere ve gelişmiş web kazıma kavramlarına kadar tüm temel bilgileri içeren bir başlangıç rehberi hazırladık, böylece profesyonel olabilirsiniz.

Web Sitesi Yapısını Anlamak

Veri toplamaya başlamadan önce web sitelerinin nasıl yapılandırıldığını anlamanız gerekir.

Öncelikle web siteleri kod kullanılarak oluşturulur. En yaygın olanları HTML (Köprü Metni İşaretleme Dili), CSS (Basamaklı Stil Sayfası) ve JavaScript'tir.

HTML kullanımı kolay olduğu için en popüler olanıdır. Etiketlerle temsil edilen öğeleri kullanarak web sayfalarının yapısını ve içeriğini tanımlar.

Örneğin,

  • <h1> başlıklar için,
  • <p> paragraflar için,

Birkaçını saymak gerekirse (ve ÇOK FAZLA var).

İşte bir HTML kodunun nasıl görüneceğine dair bir örnek:

<html>
  <head>
	<title>Example Website</title>
  </head>
  <body>
	<h1>Welcome to my website!</h1>
	<p>This is a paragraph of text.</p>
	<ul>
  	<li>Item 1</li>
  	<li>Item 2</li>
  	<li>Item 3</li>
	</ul>
  </body>
</html>
  </body>
</html>

Son olarak CSS, HTML öğelerinin stilini belirlerken, JavaScript ise web sitelerinin dinamik davranışından sorumludur.

Kullanacağımız kazıma aracı, yapısını kullanarak sayfada gezinecek ve çıkarılacak içeriği belirleyecektir. Daha düzenli ve açıklayıcı bir yapıya sahip sitelerin kazınması daha kolay olma eğilimindedir. Ve bir acemi olarak, bunu kesinlikle takdir ediyorsunuz, değil mi?

Geliştirme Ortamınızı Kurma

Tamam, artık web sitenizin yapısı hakkında bir fikriniz olduğuna göre, geliştirme ortamınızı kurmaya başlayabilirsiniz.

Öncelikle bir programlama dili seçmeniz gerekir, çünkü hepsi bu görev için uygun değildir. Python, yüksek seviyeli, kullanımı kolay ve ayrıca harika kütüphanelere, çerçevelere ve yerleşik araçlara sahip olduğu için kazıma için en popüler seçimdir.

Bunlar, aşağıdakiler gibi kazıma ile ilgili belirli bir görevi çözmeye olanak tanır:

  • Requests: Hedef web sitesine HTTP isteklerinin oluşturulmasını kolaylaştırır.
  • BeautifulSoup: bu kütüphane HTML ve XML belgelerini ayrıştırmak için kullanılır. Ama bir saniye, ayrıştırma nedir? Yapılandırılmış verileri analiz etme ve yorumlama sürecidir.
  • Selenium: İnsan etkileşimini simüle eden görevleri gerçekleştirmek üzere web tarayıcılarının otomatikleştirilmesi.
  • Scrapy: Bu kapsamlı çerçeve, web tarama (verileri çıkarmak için URL'leri arama), veri madenciliği ve otomatik test gibi farklı görevler için kullanılabilir.

Nasıl Başlanır?

  1. Ortam kurulumu: Python'un en son sürümünü indirin ve kurun. Bu kadar kolay.
  2. Sanal bir ortam kurun: Projenizin bağımlılıklarını izole tutmak için sanal bir ortam oluşturun. Bir terminal açın ve aşağıdaki komutları çalıştırın:
python -m venv myenv
source myenv/bin/activate  # For Unix/Linux
myenv\Scripts\activate.bat  # For Windows

3. Kütüphaneleri ve araçları yükleyin: Başlamak için Requests, Selenium, BeautifulSoup ve Scrapy'i yüklemenizi öneririm. Bunları “pip install” komutunu kullanmak için bir terminal açın ve aşağıdakileri çalıştırın:

pip install requests beautifulsoup4 scrapy selenium

Web Kazıma 101: Etik ve En İyi Uygulamalar

Bekleyin. Teknik konulara dalmadan önce, web kazımanın etik etkilerini ve en iyi uygulamalarını inceleyelim.

Her kazıyıcı bunu az çok bilir, ancak yeni başlayanların sınırlar içinde kalabilmeleri için aşağıdaki kuralları anlamaları gerekir:

  • Robots.txt'ye Saygı Gösterin: Kazımanın ilk kuralı Robots.txt'ye saygı göstermenizdir. Her sitenin sahip olduğu ve temel olarak neyi kazıyabileceğinizi ve neyi kazıyamayacağınızı herkese bildiren bir metin dosyasıdır.
  • Sitenin hizmet şartlarına saygı gösterin: Web kazımanın izin verilip verilmediğini görmek için sitenin hizmet şartlarını kontrol edin.
  • Kazıma sıklığını ve sunucular üzerindeki etkisini sınırlayın: Kısa bir süre içinde çok fazla istekte bulunmaktan kaçının. Ayrıca, istekler arasında gecikmeler uygulayarak sunucuyu aşırı yüklemekten kaçının.
  • API'leri kullanın (mümkünse): kazımadan önce, sitenin verilere erişmek için bir API sağlayıp sağlamadığını kontrol edin. Size bir kazıyıcı üzerinde çalıştığım ve API'nin mevcut olduğunu öğrendiğim zamanları anlatayım, ancak kontrol etme zahmetine girmedim. Bir API kullanmak çok daha kolaydır (bana güvenin) çünkü yapılandırılmış veri sağlar.
  • Yasal hususlar: Fikri mülkiyet haklarını ihlal etmediğinizden veya herhangi bir kuralı ihlal etmediğinizden emin olmak için yasaları kontrol edin. Emin değilseniz, önce bir avukata danışmanız daha iyi olur.

Web Kazımaya Başlarken: Temel Teknikler

Tamam, teori ve kavramları bitirdik, işe koyulalım. İlk öğreneceğiniz şey HTTP isteklerinin nasıl gönderileceği olacak.

Python'un İstek Kütüphanesi ile HTTP İstekleri (GET, POST) Gönderme

Burada Python'da Requests kütüphanesini kullanacağız. Bir örneğe bakalım:

import requests

url = 'https://example.com'
response = requests.get(url)
html_content = response.text

Burada, kazımak istediğiniz sayfanın URL'sini belirtin. requests.get () Bir GET isteği gönderiyoruz ve sayfanın HTML içeriği html_content değişkeninde saklanıyor.

BeautifulSoup ile HTML'yi ayrıştırma

HTML içeriğine sahip olduğunuzda, belirli verileri çıkarmak için BeautifulSoup kütüphanesini kullanarak ayrıştırabilirsiniz. İşte bir örnek:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'html.parser')
title = soup.find('h1').text
paragraphs = soup.find_all('p')

Bu kodda, HTML içeriğini geçirerek ve ayrıştırıcıyı belirterek (bu durumda, ') bir BeautifulSoup nesnesi oluşturuyoruz.html.parser'). Daha sonra şu yöntemleri kullanabiliriz: find() Ve find_all() Etiketlerine veya niteliklerine göre belirli öğeleri bulmak için.

find() ve find_all() gibi CSS Seçicileri ve Yöntemlerini Kullanarak Veri Çıkarma

CSS seçicileri, bir web sayfasındaki öğeleri bulmak için güçlü bir yol sağlar. BeautifulSoup, verileri çıkarmak için CSS seçicilerini kullanmanıza olanak tanır.

İşte bir örnek:

links = soup.select('a.external-link')
for link in links:
href = link['href']
text = link.text
print(f"Link: {href}, Text: {text}")

Bu kodda şunu kullanıyoruz: select() “ sınıfına sahip tüm etiketleri bulma yöntemiexternal-link". Daha sonra seçili öğeler üzerinde yineleme yapabilir ve istenen nitelikleri veya metni çıkarabiliriz.

Kazınan Verileri Dosyalara Kaydetme

İstenilen verileri çıkardıktan sonra, daha fazla analiz veya işlem için bir dosyaya kaydedebilirsiniz. İşte verileri bir CSV dosyasına kaydetmenin bir örneği:

import csv

data = [
['Name', 'Age', 'City'],
['John', '25', 'New York'],
['Alice', '30', 'London'],
]

with open('output.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data)

Bu kodda, bir veri satırları listesi tanımlıyoruz, “ adlı bir dosya açıyoruzoutput.csv"Yazma modunda, bir CSV yazıcı nesnesi oluşturun ve veri satırlarını dosyaya yazın.

Bunlar pratik yapmanız gereken temel tekniklerdir. İlerledikçe, dinamik web siteleri veya sayfalama gibi kazımanın zorlaştığı bazı durumlar olduğunu göreceksiniz.

Endişelenmeyin, doğru teknikleri biliyorsanız ve uygun araçlara sahipseniz (neredeyse) her siteyi kazıyabilirsiniz.

Sayfalandırma ve Çoklu Sayfaların İşlenmesi

Dönem "sayfalama” içeriklerini birden fazla sayfaya bölen siteleri ifade eder. Tüm sayfalardan veri toplamak istiyorsanız, sayfalama düzenini tanımlamanız gerekir. Bu şekilde, toplama döngünüzü değiştirebilir ve sonuçlar alabilirsiniz.

Aşağıdaki teknikleri deneyin:

  1. URL'lerde sayfa numaralandırma desenlerini belirleme: Sayfa numarasını belirten URL yapısındaki desenleri arayın. Örneğin, şu URL'ler: https://example.com/page/1, https://example.com/page/2, vb. açık bir sayfalandırma düzenini takip eder.
  2. Kazıma döngüsünü değiştirme: Kazıma döngünüzü sayfa numaraları aralığı üzerinde yineleyecek şekilde ayarlayın. Örneğin:
for page in range(1, 11):
url = f"https://example.com/page/{page}"
# Scrape data from each page

Bu kodda 1'den 10'a kadar sayfa numaraları üzerinde yineleme yapıyoruz ve her sayfanın URL'sini dinamik olarak oluşturuyoruz.

3. Bir “varlığının tespitiNext” düğmesi: Bazı web siteleri “NextAçık sayfa numaraları yerine " düğmesi. Bu gibi durumlarda, " öğesinin varlığını kontrol edebilirsiniz.Next” butonuna basın ve kaybolana kadar kazımaya devam edin.

Dinamik Web Siteleri ve JavaScript Oluşturma ile Başa Çıkma

Bir kazıyıcı olarak, kullanıcı deneyimini geliştirmeyi amaçlayan, oldukça etkileşimli ve karmaşık web siteleriyle karşılaşacaksınız. Bu tür siteler büyük ölçüde JavaScript'e dayanır ve genellikle dinamik içerikli web siteleri olarak adlandırılır.

Ama, bunun etrafındaki yaygara ne? Sorun şu ki, bu sitelerde kaynak kodu istenen verileri içermeyebilir ve bunlar kazıma için bir zorluktur.

İşte bu noktada Selenium gibi araçları kullanmanız gerekir.

Selenium, web tarayıcılarını otomatikleştirmek için güçlü bir araçtır. Web sayfalarıyla etkileşime girmenizi, formları doldurmanızı, düğmelere tıklamanızı ve dinamik olarak oluşturulan içerikten veri çıkarmanızı sağlar.

Selenium'u Kurma

Selenium'u zaten yüklediyseniz, yapmanız gereken bir sonraki şey tercih ettiğiniz tarayıcı için bir web sürücüsü yüklemektir. Örneğin, Google Chrome için ChromeDriver.

İşte kullanımına dair bir örnek:

from selenium import webdriver

driver = webdriver.Chrome()  # Assumes ChromeDriver is installed and in PATH
driver.get('https://example.com')

# Perform actions and extract data
title = driver.find_element_by_tag_name('h1').text

driver.quit()

Bu kodda, Chrome web sürücüsünün bir örneğini oluşturuyoruz, kullanarak belirli bir URL'ye gidiyoruz driver.get()ve ardından Selenium'un yöntemlerini kullanarak eylemleri gerçekleştirin ve verileri çıkarın find_element_by_tag_name().

Öğelerin Yüklenmesini Bekliyorum

Dinamik sitelerde içerik genellikle aynı anda yüklenmez. Bu nedenle, sayfa yüklendiğinde bazı öğeler hemen kullanılabilir olmayabilir. Selenium'un açık ve örtük beklemelerini kullanarak bununla başa çıkabilirsiniz.

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

wait = WebDriverWait(driver, 10)<br>element = wait.until(EC.presence_of_element_located((By.ID, 'my-element-id')))

Bu kodda, 10 saniyelik bir zaman aşımına sahip bir WebDriverWait nesnesi oluşturuyoruz. Daha sonra belirli bir kimliğe sahip bir öğenin varlığını beklemek için until() metodunu kullanıyoruz.

Selenium'a Alternatifler

Birçok kullanıcı Selenium'un dinamik siteler için kullanılabilecek en iyi seçenek olduğuna inansa da, sizin için en uygun olanı bulmak için alternatifleri araştırmalısınız.

Scrapy-Splash bir seçenek olabilir. Scrapy framework'ü ile headless tarayıcının entegrasyonudur. Scrapy'nin engellemeyen ağ altyapısı ve Splash'in dinamik web sayfalarını hızlı bir şekilde işlemek için gelişmiş özellikleri sayesinde verilerin daha verimli bir şekilde çıkarılmasına olanak tanır.

Requests-html, JavaScript görüntüleme ve web sayfalarıyla etkileşim desteği ekleyerek istek kütüphanesinin işlevselliğini genişlettiği için bir diğer alternatiftir.

Gelişmiş Web Kazıma Teknikleri

İlerlemeye başladıkça bazı kazıma senaryolarıyla başa çıktığınızı göreceksiniz, ancak aynı zamanda daha gelişmiş teknikler gerektiren karmaşık senaryolarla da karşı karşıya kalacaksınız.

Kimlik Doğrulama ve Çerezlerin İşlenmesi

Bazı web siteleri kullanıcı oturumlarını yönetmek için kimlik doğrulaması gerektirir veya çerezler kullanır. İsteklerinizle birlikte oturum açma kimlik bilgilerini göndererek kimlik doğrulamasını yönetebilir ve şu kütüphaneleri kullanarak çerezleri yönetebilirsiniz: requests veya http.çerez kavanozu.

Tespit ve Yasaklardan Kaçınma

Web siteleri web kazıma etkinliklerini tespit etmek ve engellemek için önlemler alabilir. Tespit edilmekten kaçınmak için kullanıcı aracılarını döndürme, proxy kullanma ve istekler arasında rastgele gecikmeler oluşturma gibi teknikler kullanabilirsiniz.

Veritabanlarında Veri Depolama

Kazınmış verileri dosyalara kaydetmek yerine, daha verimli depolama ve geri alma için veritabanlarında saklayabilirsiniz. Popüler tercihler arasında MySQL ve PostgreSQL gibi SQL veritabanları ve MongoDB gibi NoSQL veritabanları bulunur.

API'leri Kazıma ve JSON Verilerini İşleme

Hey! API'yi buldunuz. Ancak JSON formatında. Ne yapabilirsiniz? Şu kütüphaneleri kullanabilirsiniz: requests Python'daki json modülünü kullanarak API istekleri yapmak ve JSON yanıtlarını ayrıştırmak.

Paralel ve Asenkron Kazıma

Kazıma sürecini hızlandırmak için paralel işleme ve asenkron programlama tekniklerinden yararlanabilirsiniz. Python'daki multiprocessing, threading ve asyncio gibi kütüphaneler bunu başarmanıza yardımcı olabilir.

Hepsini Bir Araya Getirmek: Gerçek Dünya Web Kazıma Projeleri

Acemi biri olarak, kazıma eğitimime başladığımda, yapmam gerekene kadar ne yapmam gerektiğini tamamen bildiğimi hissettim. Sadece okumanın bir anlamı yok, pratik yaparak becerilerinizi test etmelisiniz.

Peki, bunu gerçek dünya projeleri üzerinde çalışarak yapmanın daha iyi bir yolu var mı?

Adım adım işleyişleriyle bazı örneklere bir göz atalım:

Örnek 1: Haber Makalelerini ve Duygu Analizini Toplama

  1. Kazıma işleminin planlanması:
    • Kazınacak haber sitesini belirleyin
    • Makalelerin yapısını (başlık, içerik, tarih vb.) belirleyin
    • Veri depolama formatını planlayın (örneğin CSV, veritabanı)
  2. Kazıyıcının uygulanması:
    • Haber web sitesinin HTML içeriğini almak için istekleri kullanın
    • Makale bilgilerini çıkarmak için HTML'yi BeautifulSoup kullanarak ayrıştırın
    • Sayfalandırmayı yönetin ve birden fazla sayfada gezinin
    • Kazınan verileri seçilen biçimde saklayın
  3. Kazınan verilerin analiz edilmesi ve görselleştirilmesi:
    • NLTK veya TextBlob gibi kütüphaneleri kullanarak makale içeriği üzerinde duygu analizi gerçekleştirin
    • Duygu puanlarını Matplotlib veya Plotly gibi kütüphaneleri kullanarak görselleştirin
    • Zaman içinde haber duygusundaki eğilimleri ve kalıpları belirleyin

Örnek 2: Bir Fiyat İzleme Aracı Oluşturma

  1. E-ticaret sitelerinden ürün bilgisi toplama:
    • Kazınacak e-ticaret web sitelerini belirleyin
    • Ürün bilgilerinin yapısını (isim, fiyat, bulunabilirlik vb.) belirleyin
    • Ürün verilerini birden fazla web sitesinden çıkarmak için web kazıma tekniklerini kullanın
  2. Uyarı ve bildirimleri ayarlama:
    • Her ürün için fiyat eşikleri veya bulunabilirlik kriterleri tanımlayın
    • Kazınan fiyatların tanımlanan eşiklerle karşılaştırılmasını sağlayacak bir mekanizma uygulayın
    • Fiyatlar düştüğünde veya ürünler mevcut olduğunda kullanıcıları uyarmak için e-posta veya SMS bildirimleri ayarlayın
  3. Kazıyıcıyı buluta dağıtma:
    • Bir bulut platformu seçin (örneğin, AWS, Google Cloud, Heroku)
    • Gerekli ortamı ve bağımlılıkları yapılandırın
    • Kazıyıcının düzenli aralıklarla çalışmasını planlayın
    • Kolay erişim ve izleme için toplanan verileri bulut tabanlı bir veritabanında saklayın

Web Kazıma Çerçeveleri ve Araçları

“Çerçeve” ve “kütüphane” terimlerinin birbirinin yerine kullanıldığını biliyorum, ancak bunlar farklı şeyler ifade ediyor ve farklı amaçlar için kullanılıyor.

Request veya BeautifulSoup gibi kütüphanelerle sıfırdan web kazıyıcılar oluşturabilirsiniz. Ancak, çerçevelerle, bir araç ve kütüphane koleksiyonu oldukları için süreci basitleştirebilirsiniz.

Şöyle bakalım, kütüphaneler manuel sürüşlü arabalar gibidir, size tam kontrol sağlar ancak gezinmek için daha fazla çaba ve beceri gerektirir. Çerçeveler otomatik arabalar gibidir; kazımanın birçok sıkıcı yönünü basitleştirerek daha akıcı ve daha verimli bir deneyim sunarlar.

En popüler seçeneklerden bazıları şunlardır:

Scrapy

Scrapy, ölçeklenebilir ve etkili web kazıyıcıları oluşturmak için eksiksiz bir ekosisteme sahip Python için bir çerçevedir. Temel özellikleri şunlardır:

  • Tasarımı gereği hızlı.
  • CSV, JSON ve diğer dosyaları oluşturmak için kod eklemenize gerek yok.
  • XPath ve CSS Seçicileri desteği.
  • Harika bir uzantı ekosistemi, ara yazılımlara destek gibi.
  • Veri işleme ve depolama için öğe boru hatlarıyla entegrasyon

PySpider

PySpider da Python için bir framework'tür, ancak Scrapy'den farklı olarak, daha güçlü özelliği olan JavaScript ile uyumludur. Ayrıca yeni başlayanlar için de harikadır. Temel özellikleri şunlardır:

  • PhantomJS veya Puppeteer kullanarak JavaScript oluşturma desteği
  • Dahili görev kuyruğu ve zamanlayıcı
  • Veritabanları ve mesaj kuyruklarıyla entegrasyon
  • Eşzamanlılığı destekler

Web Kazıma Araçları ve Hizmetleri

Çerçevelere ek olarak, kazımayı kolaylaştırmanıza yardımcı olan bazı araçlar ve hizmetler vardır. En iyi yanı, minimum kodlama gerektirmeleridir. Bazı seçenekler şunlardır:

  • Octoparse:Web sitelerinden veri çıkarmak için nokta ve tıklama arayüzüne sahip bulut tabanlı bir web kazıma aracı.
  • ParseHub:Bir web sayfasındaki öğeleri görsel olarak seçerek web kazıyıcılar oluşturmanıza olanak sağlayan bir masaüstü uygulaması.
  • Import.io:Web sitelerinden ve API'lerden veri çıkarmak için araçlar sağlayan web tabanlı bir platform.

Web Kazıma Temellerinin Özeti

Bu kılavuzda, web sitesi yapısının anlaşılması, etik hususlar, temel ve ileri teknikler ve ek araçlar ve çerçeveler gibi web kazımanın temellerini genel hatlarıyla ele aldık.

Başlamaya hazırsınız, ancak kütüphanelerin ve çerçevelerin resmi belgeleri ve web kazıma eğitimleri gibi ek kaynakları okuyarak bilginizi genişletmeyi düşünün.

Ayrıca, kazıma toplulukları ve forumlarındaki deneyimli kazıyıcılardan rehberlik almaya çalışın. Birbirimize ihtiyacımız olduğu için izole olmayın.

Hepimiz bir zamanlar yeni başlayanlardık, bu yüzden kendinize karşı nazik olun, küçük başlayın ve düzenli olarak pratik yapın. Yeterli pratik ve özveriyle, ilerledikçe daha karmaşık projeleri nasıl ele alabileceğinizi göreceksiniz.

Alexander Schmidt

Alexander Schmidt, daha çok değil, daha akıllıca çalışmanın gerektiğine inanan bir yazılım mühendisidir. Analiz ve araştırma için otomasyon ve web verilerinin çıkarılmasıyla ilgili 12 yıllık deneyimiyle, başkalarının proxy çözümlerinin değerini ve performansını en üst düzeye çıkarmasına yardımcı olmak için işletmelere eğlenceli ve okunması kolay bir şekilde sunulan pratik ipuçları ve değerli bilgilerle güç veriyor. Kurulumunda değişiklik yapmadığı veya KOBİ'lere danışmanlık yapmadığı zamanlarda, Alexander'ı en son teknoloji haberlerini ve yapay zeka gelişmelerini araştırırken bulabilirsiniz.

Proxy Seçin ve Satın Alın

Fiyatları anında görüntülemek için tür, konum ve miktar seçin.

Proxy Seçin ve Satın Alın