Python ile Craigslist Kazıma Rehberi

Yorumlar: 0

Craigslist, mevcut dijital sahnede belirli sınıflandırılmış ilanlara erişmek için hala önemli bir platformdur. İlanlardan ayrıntıların çıkarılmasını kolaylaştırmak için Python kullanmak çok yararlı olmaktadır. Verimli web kazıma işlemleri, Python'daki Requests veya BeautifulSoup gibi uyarlanabilirlik ve güçlü kütüphaneler tarafından etkinleştirilir. Bu kılavuz, Python ile Craigslist kazıma alanına girerek, içerik çıkarma için BeautifulSoup ve Requests kullanımının yanı sıra anti-bot savunmalarında etkili bir şekilde gezinmek için proxy rotasyonunu vurgulamaktadır.

Craigslist'i Python ile kazımak için temel adımlar

Daha sonra, HTTP istekleri göndermek ve belirli sayfa öğelerini ayıklamakla başlayıp verileri gerekli biçimde kaydetmekle bitirerek kazıma sürecini adım adım inceleyeceğiz.

Ortamınızı ayarlama

Gerekli kütüphaneleri yüklemeniz gerekecektir:


pip install beautifulsoup4
pip install requests

Craigslist sayfalarına HTTP istekleri gönderme

Craigslist listeleme sayfalarına HTTP GET istekleri göndermek için requests kütüphanesini kullanın.


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}")

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

HTML ayrıştırma ve alınan içerikte gezinme için BeautifulSoup kullanın.


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 yöntemlerini kullanarak veri ayıklama

BeautifulSoup yöntemlerini kullanarak Craigslist listelerinden ürün başlıkları ve fiyatları gibi verileri ayıklayın.


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

Description:

3.png

Kazınan verileri CSV Dosyasına kaydetme

Veriler çıkarıldıktan sonra, daha fazla analiz veya diğer araçlarla entegrasyon için bir CSV dosyasına kaydedin.


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}")

Potansiyel engellerin üstesinden gelmek

Craigslist, kazımayı önlemek için IP engelleme veya CAPTCHA zorlukları gibi önlemler uygulayabilir. Bu sorunları azaltmak için proxy kullanmayı ve kullanıcı aracılarını döndürmeyi düşünün.

Proxy kullanmak:

Bu örnek, IP adresi yetkilendirmesi ile bir proxy kullanımını göstermektedir.


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ı-Agent rotasyonu:


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 eksiksiz Python betiği, birden çok URL'den veri ayıklayan, ayrıştıran ve alan verimli bir Craigslist kazıyıcı oluşturmak için farklı bileşenlerin nasıl entegre edileceğini gösterir.


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')  # Extracting description

            # 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}")

Craigslist önemlidir çünkü piyasaları incelemek, diğerlerinin yanı sıra potansiyel müşteriler bulmak için bize yararlı bilgiler veren seri ilanları bulabileceğimiz bir yer sağlar. Craigslist web kazıma işlemi Python tarafından BeautifulSoup ve Request gibi kütüphaneler kullanılarak kolaylaştırılmıştır. Bu eğitimde tartışılan temel taktikler, dinamik içeriği ele almak ve proxy'leri döndürmektir. Python'dan sorumlu bir şekilde yararlanarak, Craigslist listelerinden eyleme geçirilebilir bilgiler çıkarabilir ve çeşitli alanlarda bilinçli karar vermeyi destekleyebilirsiniz.

Yorumlar:

0 yorumlar