Python ile Craigslist Kazıma: Eksiksiz Bir Kılavuz

Yorumlar: 0

Craigslist gibi bir reklam platformu dijital çağda da geçerliliğini koruyor. Toplayıcı, özellikle doğrudan web sitelerinden veri elde ederek reklamlardan bilgi çıkarılmasını otomatikleştirmeye yardımcı olur. BeautifulSoup ve Requests gibi esnek ve güçlü kütüphaneler sayesinde veri toplama işlemi verimli bir şekilde gerçekleştirilebilir. Bu eğitim, bot tespitini önlemek için BeautifulSoup, Requests ve proxy rotasyonunu vurgulayarak python ile craigslist kazıma üzerine odaklanmaktadır.

Şimdi Craigslist'in nasıl kazınacağını adım adım anlatacağız.

Python ile Craigslist Verilerini Kazımak için Temel Adımlar

Şimdi, belirli bir web sayfasına HTTP istekleri gönderme, gerekli sayfayı bölümlere ayırma, istenen verileri toplama ve önceden belirlenmiş bir biçimde kaydetme ile başlayarak Craigslist web kazıma adımlarını daha ayrıntılı olarak inceleyeceğiz.

Ortamınızı Kurma

Aşağıdaki paketler indirilmeli ve kurulmalıdır:


pip install beautifulsoup4
pip install requests

Craigslist Sayfalarına HTTP İstekleri Gönderme

Web sayfalarından veri almak için öncelikle kazımak istediğiniz URL'lere HTTP istekleri göndermeniz gerekir. İstekler kütüphanesini kullanarak, HTML içeriğini almak için GET istekleri gönderebilir ve daha sonra ihtiyacınız olan bilgileri ayıklamak için bunları işleyebilirsiniz.


import requests

# Kazınacak Craigslist URL'lerinin listesi
urls = [
    "link",
    "link"
]

for url in urls:
    # URL'ye bir GET isteği gönderin
    response = requests.get(url)
    
    # İsteğin başarılı olup olmadığını kontrol edin (durum kodu 200)
    if response.status_code == 200:
        # Yanıttan HTML içeriğini ayıklayın
        html_content = response.text
        
    else:
        # İstek başarısız olursa, durum kodunu içeren bir hata mesajı yazdırın
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

BeautifulSoup kullanarak HTML içeriğini ayrıştırma

BeautifulSoup ile HTML'den geçebilir ve Craigslist'ten ihtiyacınız olan parçaları seçebilirsiniz. Etiketleri bulmanızı, metin almanızı ve bağlantılar veya fiyatlar gibi şeyleri almanızı sağlar. Dağınık web sayfalarından yararlı bilgiler çekmenin basit bir yoludur.


from bs4 import BeautifulSoup

# Listedeki her URL'yi yinele
for url in urls:
    # URL'ye bir GET isteği gönderin
    response = requests.get(url)
    
    # İsteğin başarılı olup olmadığını kontrol edin (durum kodu 200)
    if response.status_code == 200:
        # Yanıttan HTML içeriğini ayıklayın
        html_content = response.text
        
        # BeautifulSoup kullanarak HTML içeriğini ayrıştırma
        soup = BeautifulSoup(html_content, 'html.parser')
        
    else:
        # İstek başarısız olursa, durum kodunu içeren bir hata mesajı yazdırın
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

BeautifulSoup Kütüphanesi ile Veri Toplama

HTML içeriğini aldıktan sonra, bir sonraki adım BeautifulSoup kütüphanesini kullanarak içeriği ayrıştırmaktır. Fonksiyonları kullanarak, ürün başlıkları ve fiyatları gibi listeler gibi Craigslist veri kazıma işlemlerini gerçekleştiriyoruz. Bu, işe yarar kısımları hızlı ve verimli bir şekilde bulmak için dağınık kodu elemenize yardımcı olan bir araca sahip olmak gibidir.


from bs4 import BeautifulSoup

# Listedeki her URL'yi yinele
for url in urls:
    # URL'ye bir GET isteği gönderin
    response = requests.get(url)
    
    # İsteğin başarılı olup olmadığını kontrol edin (durum kodu 200)
    if response.status_code == 200:
        # Yanıttan HTML içeriğini ayıklayın
        html_content = response.text
        
        # BeautifulSoup kullanarak HTML içeriğini ayrıştırma
        soup = BeautifulSoup(html_content, 'html.parser')
        
        # Belirli veri noktalarını ayıklama
        # Listenin başlığını bulun
        title = soup.find('span', id='titletextonly').text.strip()
        
        # Listelemenin fiyatını bulun
        price = soup.find('span', class_='price').text.strip()
        
        # İlanın açıklamasını bulun (birden fazla paragraf içerebilir)
        description = soup.find('section', id='postingbody').find_all(text=True, recursive=False)
        
        # Çıkarılan verileri yazdırma (gösterim amaçlı)
        print(f"Title: {title}")
        print(f"Price: {price}")
        print(f"Description: {description}")
        
    else:
        # İstek başarısız olursa, durum kodunu içeren bir hata mesajı yazdırın
        print(f"Failed to retrieve {url}. Status code: {response.status_code}")

Başlık:

1.png

Fiyat:

2.png

Açıklama:

3.png

Kazınan Verileri CSV Dosyasına Kaydetme

Craigslist verilerini çıkardıktan sonra, gelecekte kullanımı veya analizi kolaylaştırmak ve diğer uygulamalarla birlikte çalışabilirlik için CSV formatında saklandığından emin olun.


import csv

# CSV dosya yolunu ve alan adlarını tanımlayın
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# CSV dosyasına veri yazma
try:
    # CSV dosyasını UTF-8 kodlaması ile yazma modunda açın
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        # Belirtilen alan adlarıyla bir CSV DictWriter nesnesi oluşturun
        writer = csv.DictWriter(file, fieldnames=fieldnames)
        
        # CSV dosyasına başlık satırını yazın
        writer.writeheader()
        
        # Kazınmış_veri listesindeki her öğeyi yinele
        for item in scraped_data:
            # Her bir öğeyi CSV dosyasına bir satır olarak yazın
            writer.writerow(item)
        
    # CSV dosyasına veri yazdıktan sonra bir başarı mesajı yazdırma
    print(f"Data saved to {csv_file}")

except IOError:
    # CSV dosyasına yazarken bir IOError oluşursa bir hata mesajı yazdırın
    print(f"Error occurred while writing data to {csv_file}")

Craigslist Api Python nasıl kullanılır

Craigslist web sitesinden otomatik olarak ilan toplamak istiyorsanız, en kolay yollardan biri bir kütüphane aracılığıyla resmi olmayan API'yi kullanmaktır. Sitede sorgulama yapmanıza, sonuçları kategoriye, şehre, fiyata, anahtar kelimelere ve daha fazlasına göre filtrelemenize olanak tanır.

Kütüphaneyi kurarak başlayın:


pip install python-craigslist


İşte New York'ta kiralık daire aramak için basit bir örnek:


from craigslist import CraigslistHousing

cl_h = CraigslistHousing(site='newyork', category='apa', filters={'max_price': 2000})
for result in cl_h.get_results(limit=10):
    print(result['name'], result['price'], result['url'])

Bu kod, New York City'deki kiralık daireler/konutlar bölümünden fiyatı 2000 doların altında olan ilk 10 ilanı getirir.

Kütüphane ayrıca çok çeşitli filtrelerle birlikte iş ilanları, arabalar, satılık ürünler ve daha fazlası gibi kategorileri de destekler. Botlar, listeleme izleyicileri veya piyasa analizleri gibi Python tabanlı araçları hızlı bir şekilde oluşturmak için harika bir araçtır.

Potansiyel Engellerin Üstesinden Gelme

Özellikle Craigslist ile web kazıma yaparken karşılaşılabilecek bir dizi ek zorluk vardır. Kazıma girişimlerini önlemek için IP blokları ve CAPTCHA zorlukları uygular. Bu sorunlardan kaçınmak için, kullanıcı aracısı rotasyonunun yanı sıra proxy'ler de uygulayabilirsiniz.

Vekilleri kullanma:

Proxy'leri ve dönüşümlü kullanıcı temsilcilerini birlikte kullanmak, yakalanmadan kazıma yapmaya devam etmenin akıllıca bir yoludur.


proxies = {
    'http': 'http://your_proxy_ip:your_proxy_port',
    'https': 'https://your_proxy_ip:your_proxy_port'
}

response = requests.get(url, proxies=proxies)

Kullanıcı aracısı rotasyonu, kazıyıcınızın her istekte gönderdiği tarayıcı kimliğini değiştirmek anlamına gelir. Her zaman aynı kullanıcı aracısını kullanırsanız, şüpheli görünür. Farklı kullanıcı aracıları arasında geçiş yapmak, kazıyıcınızın normal kullanıcılar gibi görünmesini sağlayarak engellemelerden kaçınmanıza yardımcı olur:


import random

user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    # Gerektiğinde daha fazla kullanıcı aracısı ekleyin
]

headers = {
    'User-Agent': random.choice(user_agents)
}

response = requests.get(url, headers=headers)

Tam Kod

Bu eğitim boyunca tartışılan tüm modülleri entegre etmek, tamamen işlevsel bir Python Craigslist kazıyıcı geliştirilmesini sağlar. Bu program, bir dizi URL'yi ayıklayabilir, ayrıştırabilir ve gezinebilir ve gerekli verileri alabilir.


import requests
import urllib3
from bs4 import BeautifulSoup
import csv
import random
import ssl

ssl._create_default_https_context = ssl._create_stdlib_context
urllib3.disable_warnings()


# Kazınacak Craigslist URL'lerinin listesi
urls = [
    "link",
    "link"
]

# Kullanıcı aracıları ve proxy'ler
user_agents = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
]

proxies = [
    {'http': 'http://your_proxy_ip1:your_proxy_port1', 'https': 'https://your_proxy_ip1:your_proxy_port1'},
    {'http': 'http://your_proxy_ip2:your_proxy_port2', 'https': 'https://your_proxy_ip2:your_proxy_port2'},
]

# Kazınmış verileri depolamak için liste
scraped_data = []

# Listedeki her URL arasında döngü
for url in urls:
    # Tespit edilmekten kaçınmak için her istek için kullanıcı aracısını döndürün
    headers = {
        'User-Agent': random.choice(user_agents)
    }

    # IP engellemesini önlemek için her istek için farklı bir proxy kullanın
    proxy = random.choice(proxies)

    try:
        # Craigslist URL'sine üstbilgiler ve proxy ile GET isteği gönderme
        response = requests.get(url, headers=headers, proxies=proxy, timeout=30, verify=False)
        
        # İsteğin başarılı olup olmadığını kontrol edin (durum kodu 200)
        if response.status_code == 200:
            # Yanıtın HTML içeriğini ayrıştırın
            html_content = response.text
            soup = BeautifulSoup(html_content, 'html.parser')

            # Ayrıştırılmış HTML'den veri ayıklama
            title = soup.find('span', id='titletextonly').text.strip()
            price = soup.find('span', class_='price').text.strip()
            description = soup.find('section', id='postingbody').get_text(strip=True, separator='\n')  # Açıklama çıkarma

            # Kazınan verileri listeye sözlük olarak ekleme
            scraped_data.append({'Title': title, 'Price': price, 'Description': description})
            print(f"Data scraped for {url}")
        else:
            # İstek başarısız olursa hata mesajı yazdır
            print(f"Failed to retrieve {url}. Status code: {response.status_code}")
    except Exception as e:
        # Kazıma sırasında bir hata oluşursa istisna mesajı yazdır
        print(f"Exception occurred while scraping {url}: {str(e)}")

# Kazınan verileri depolamak için CSV dosyası kurulumu
csv_file = 'craigslist_data.csv'
fieldnames = ['Title', 'Price', 'Description']

# Kazınan verileri CSV dosyasına yazma
try:
    with open(csv_file, mode='w', newline='', encoding='utf-8') as file:
        writer = csv.DictWriter(file, fieldnames=fieldnames)

        # CSV dosyasına başlık satırı yazma
        writer.writeheader()

        # Scraped_data listesini yineleyin ve her bir öğeyi CSV dosyasına yazın
        for item in scraped_data:
            writer.writerow(item)

    # Veriler başarıyla kaydedilirse başarı mesajı yazdır
    print(f"Data saved to {csv_file}")
except IOError:
    # CSV dosyasına yazarken bir IOError varsa hata mesajı yazdırın
    print(f"Error occurred while writing data to {csv_file}")

Python ile Craigslist Kazıma: Son Düşünceler

Artık web kazımanın nasıl çalıştığını anladığınıza göre, ister pazarları analiz ediyor ister potansiyel müşteri arıyor olun, neden bu kadar kullanışlı olduğunu anlamak kolaydır. Web siteleri değerli bilgilerle doludur ve BeautifulSoup ve Requests gibi araçlar bu verileri çekmeyi oldukça basit hale getirir. Bu kılavuzda ayrıca dinamik içerikle başa çıkma ve radarın altında kalmak için dönen proxy'ler kullanma gibi önemli ipuçlarına da değinildi. Doğru yapıldığında, Python ile kazıma, işletmelerin ve insanların her türlü alanda daha akıllı kararlar almasına gerçekten yardımcı olabilir.

Yorumlar:

0 yorumlar