tr
English
Español
中國人
Tiếng Việt
Deutsch
Українська
Português
Français
भारतीय
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski 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.
Ş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.
Aşağıdaki paketler indirilmeli ve kurulmalıdır:
pip install beautifulsoup4
pip install requests
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 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}")
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:
Fiyat:
Açıklama:
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 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.
Ö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)
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}")
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