Gelişmiş Python Web Kazıyıcı

Python'da gelişmiş bir web kazıyıcı oluşturun. Sayfa verilerini çıkarmayı, kullanıcı aracısı bloklarını yönetmeyi, hız sınırlarını yönetmeyi ve çıktıları yapılandırmayı öğrenin.

Editör'de deneyin

Genel Bakış

Web kazıma, web sayfalarının programlı olarak getirilmesini ve belirli verileri çıkarmak için HTML yapılarının ayrıştırılmasını içerir. Python'da bu, geleneksel olarak "requests" ve "BeautifulSoup" kullanılarak gerçekleştirilir.

Gelişmiş sıyırıcılar sağlam konfigürasyon gerektirir. Basitçe sayfa istemek, bloklamalara veya IP yasaklamalarına neden olabilir, bu da özel Kullanıcı Aracıları gibi başlıkların özelleştirilmesini gerektirir ve rastgele gecikme aralıkları sunar.

Bu etkileşimli örnek, sahte verileri doğrulamayla kazımayı taklit eder. İç içe kapsayıcıların nasıl bulunacağını, ağ zaman aşımlarının nasıl ele alınacağını ve çıktı verilerinin temiz listeler halinde nasıl yapılandırılacağını gösterir.

Kod ve Yürütme Çıkışı

Özel başlıklar, zaman aşımı yönetimi ve HTML ayrıştırıcı yapılarını içeren bir web kazıma rutini.

adv_scraper.py
Editör'de deneyin
import requests
from bs4 import BeautifulSoup
import time

def scrape_quotes():
    # Mock URL designed for scraping practice
    url = "https://quotes.toscrape.com/"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    }
    
    print(f"Initiating request to: {url}...")
    try:
        # Request with timeout protection
        response = requests.get(url, headers=headers, timeout=5)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.text, "html.parser")
        quotes = soup.find_all("div", class_="quote", limit=3)
        
        results = []
        for q in quotes:
            text = q.find("span", class_="text").text
            author = q.find("small", class_="author").text
            tags = [t.text for t in q.find_all("a", class_="tag")]
            results.append({
                "quote": text,
                "author": author,
                "tags": tags
            })
            
        print("Scrape completed successfully!\n")
        for idx, item in enumerate(results):
            print(f"Quote {idx+1}: {item['quote']}")
            print(f"  Author: {item['author']}")
            print(f"  Tags:   {', '.join(item['tags'])}\n")
            
    except requests.exceptions.RequestException as e:
        print(f"Network error occurred: {e}")

scrape_quotes()
Terminal Çıkışı
Initiating request to: https://quotes.toscrape.com/...
Scrape completed successfully!

Quote 1: “The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
  Author: Albert Einstein
  Tags:   change, deep-thoughts, thinking

Quote 2: “It is our choices, Harry, that show what we truly are, far more than our abilities.”
  Author: J.K. Rowling
  Tags:   abilities, choices

Quote 3: “There are only two ways to live your life. One is as though nothing is a miracle. The other is as though everything is a miracle.”
  Author: Albert Einstein
  Tags:   inspirational, life, live, miracle

Adım Adım Uygulama

  • Alışveriş kataloglarında fiyat izleme ve takip
  • Forumlardan inceleme verileri toplayarak duygu analizi
  • Akademik araştırma veri kümelerinin oluşturulması

Sıkça Sorulan Sorular

robots.txt nedir?

Arama robotlarının ve tarayıcıların hangi yolları taramasına izin verildiğini veya yasaklandığını belirten, bir alanın köküne yerleştirilen bir metin dosyası. Bir kazıyıcı yazmadan önce mutlaka okumalısınız.

JavaScript aracılığıyla dinamik olarak oluşturulan sayfaları nasıl kazıyabilirim?

Standart istekler yalnızca statik HTML'yi getirir. Javascript ağırlıklı sayfaları ayrıştırmak için Playwright veya Selenium gibi tarayıcı otomasyon araçlarını kullanmalısınız.

İlgili Konular