Avito parsing, otomatik betikler kullanarak Avito platformundaki herkese açık verilerin sistematik biçimde çıkarılması anlamına gelir. Proxy'ler bu sürecin temel taşıdır: IP adresinizi gizleyen aracılar olarak çalışır, böylece anti-bot mekanizmalarını aşabilir, istek hızını yönetebilir ve anonim kalabilirsiniz. Bu da şirketlerin hayati pazar istihbaratını, rakip verilerini ve potansiyel müşterileri verimli biçimde ve ölçekli olarak toplamasını mümkün kılar.
Avito verileri şirketler için neden altın madeni
Rusya'nın en büyük ilan platformu olan Avito, emlak ve araçlardan iş ilanlarına ve hizmetlere kadar çok çeşitli kategorilerde muazzam bir veri hacmi barındırır. Bu devasa dijital pazar yeri; rekabet avantajı elde etmek, pazar dinamiklerini anlamak veya yeni fırsatlar bulmak isteyen şirketler için eşsiz bir kaynak sunar. Bu verileri parsing yoluyla programatik olarak çıkarmak, kaynağın gerçek potansiyelini açığa çıkarır.
Pazar araştırması ve analizi
- Fiyat takibi: rakiplerin sunduğu ürün veya hizmetlerin fiyatlarını izleyin. Perakendeciler için bu, en uygun fiyatlandırma stratejisini anlamak demektir; emlak ofisleri için ise mülk değerlerini ölçmek.
- Talep tahmini: belirli ürün veya hizmetlerdeki talep dalgalanmalarını öngörmek için ilan sayısını, görüntülenmeleri ve iletişim oranlarını zaman içinde analiz edin. Örneğin belirli bir otomobil modeline ait ilanlarda ani bir artış, pazar doygunluğuna ya da yeni bir eğilime işaret edebilir.
- Trend tespiti: ilan kalıplarını ve arama sorgularını gözlemleyerek tüketici tercihlerindeki yeni eğilimleri, popüler ürün kategorilerini veya hizmet taleplerini yakalayın.
- Coğrafi analiz: fiyat, arz ve talepteki bölgesel farkları anlayın. Bu, fiziksel varlığı olan ya da pazar genişlemesi planlayan şirketler için özellikle değerlidir.
Rakip istihbaratı
Avito'da rakip faaliyetlerini izlemek, onların stratejileri ve performansı hakkında uygulanabilir içgörüler sağlar.
- İlan stratejileri: rakiplerin ilanlarını nasıl yazdığını, hangi anahtar kelimeleri kullandığını ve görsellerinin kalitesini gözlemleyin.
- Envanter ve stok seviyeleri: bayiler için (otomobil, elektronik) rakip ilanlarını izlemek stok büyüklüğünü, ürünlerin ne kadar hızlı satıldığını ve stok devir hızını ortaya koyabilir.
- Fiyat dinamikleri: özellikle pazar değişimlerine veya promosyon kampanyalarına tepki olarak rakiplerin zaman içindeki fiyat ayarlamalarını analiz edin.
- Yeni ürün/hizmet lansmanları: bir rakip yeni bir teklif sunduğunda bunu ilk öğrenenlerden olun; böylece hızlı stratejik yanıt verebilirsiniz.
Potansiyel müşteri bulma ve satış
Avito parsing, özellikle B2B'de ve belirli B2C sektörlerinde doğrudan bir satış fırsatı kanalı olabilir.
- Potansiyel müşterilerin belirlenmesi: belirli parça veya hizmet satan şirketler için (örneğin oto yedek parça, tadilat hizmetleri) parsing, ilgili ürünleri ilana koyan ya da belirli hizmetleri arayan kişileri veya firmaları tespit edebilir.
- B2B fırsatları: web sitesi geliştirme, pazarlama veya lojistik gibi hizmetler sunan şirketler, iş ilanlarını ya da hizmet ilanlarını parse ederek potansiyel müşteriler bulabilir. Örneğin bir web geliştirme ajansı, "web sitesi lazım" şeklinde ilan veren işletmeleri hedefleyebilir.
- Emlak danışmanları: satılık veya kiralık mülkleri doğrudan mal sahiplerinden tespit edin; böylece diğer ofisleri devre dışı bırakıp münhasır portföy elde edebilirsiniz.
- Otomotiv bayileri: aracını elden çıkarmak isteyen bireysel satıcıları bulun; bu, takas veya yeniden satış için doğrudan alım fırsatları yaratır.
Avito parsing'in doğasında olan zorluklar
Avito'daki veriler paha biçilmez olsa da bunları ölçekli biçimde çıkarmak engelsiz değildir. Avito da çoğu büyük çevrimiçi platform gibi, öncelikle altyapısını korumak, adil kullanımı sağlamak ve veri bütünlüğünü sürdürmek amacıyla otomatik kazımayı engelleyen gelişmiş mekanizmalar kullanır. Bu zorlukların üstesinden gelmek için, sağlam proxy çözümlerine dayanan iyi tasarlanmış bir parsing stratejisi şarttır.
Anti-bot sistemleri
Avito, insan kullanıcıları otomatik botlardan ayırmak için trafik kalıplarını etkin biçimde izler. Yaygın anti-bot önlemleri şunlardır:
- IP kara listesi: tek bir IP adresinden kısa sürede çok fazla istek gelirse Avito sunucuları büyük olasılıkla o IP'yi işaretleyip engeller ve erişimi keser. Bu, parser'lar için en yaygın ve en hızlı ortaya çıkan engeldir.
- CAPTCHA: şüpheli bir IP'den veya user-agent'tan gelen çok sayıda istek CAPTCHA sorularını tetikleyebilir (örneğin reCAPTCHA). Bunlar botların otomatik olarak çözmesi zor olacak şekilde tasarlanır.
- JavaScript kontrolleri: bazı sayfalar içeriği tam olarak oluşturmak veya belirli kontrolleri geçmek için JavaScript çalıştırmayı gerektirebilir; bu durumda basit HTTP istekleri yetersiz kalır.
- Rate limiting: doğrudan bir engelleme olmasa bile sunucu, tek bir kaynaktan olağandışı istek sıklığı tespit ettiğinde yanıtları bilerek yavaşlatabilir veya boş içerik döndürebilir.
- User-Agent dizesi analizi: sunucular isteklerinizdeki User-Agent başlığını inceleyebilir. Başlık genelse, güncelliğini yitirmişse veya açıkça bir botu işaret ediyorsa erişim reddedilebilir.
Dinamik içerik ve yapı
Avito dahil modern web uygulamaları, içeriği dinamik olarak yüklemek için büyük ölçüde JavaScript'e dayanır. Bu şu anlama gelir:
- AJAX ile yüklenen veriler: içeriğin büyük bölümü, özellikle arama sonuçları veya ayrıntılı ilan bilgileri, sayfanın ilk HTML'i teslim edildikten sonra AJAX çağrılarıyla asenkron olarak yüklenebilir. Standart HTML parser'lar (BeautifulSoup gibi) ek adımlar olmadan bu içeriği göremez.
- Sık HTML değişiklikleri: Avito geliştiricileri sitenin düzenini, HTML sınıf adlarını veya öğe ID'lerini zaman zaman güncelleyebilir. Bu değişiklikler parsing betiklerinizi bozabilir ve sürekli bakım ile uyarlama gerektirir.
Hukuki ve etik hususlar
Teknik olarak mümkün olsa da Avito verilerini parse etmek, karmaşık bir hukuki ve etik sınırlar alanında hareket etmeyi de gerektirir. Bunları göz ardı etmek yasal işleme, itibar kaybına veya hesap kapatmalarına yol açabilir. Bu konu ilerleyen bölümlerde ayrıntılı ele alınacak, ancak baştan kabul edilmesi gereken kritik bir zorluktur.
Proxy'ler: Avito parsing'in adı konmamış kahramanları
Avito'nun kullandığı gelişmiş anti-bot önlemleri göz önüne alındığında, proxy olmadan ölçekli parsing denemek boşa kürek çekmektir. Proxy'ler yalnızca bir seçenek değil; başarılı her Avito parsing stratejisinin temel bileşenidir. İsteklerinizi farklı IP adresleri üzerinden yönlendiren vazgeçilmez aracılar olarak çalışır, gerçek kimliğinizi gizler ve istek yükünüzü çok sayıda sanal konuma dağıtır.
Proxy'ler neden vazgeçilmez
Proxy'ler Avito parsing'in temel zorluklarını doğrudan çözer:
- IP rotasyonu ve anonimlik: istekleri çeşitli IP adreslerinden oluşan bir havuz üzerinden yönlendirerek proxy'ler, Avito'nun tek IP'nizi tespit edip engellemesini önler. Her istek farklı bir cihazdan ve konumdan geliyormuş gibi görünebilir; bu, organik kullanıcı davranışını taklit eder. IP kara listesini aşmak için bu kritiktir.
- Rate limit'leri aşma: geniş bir IP havuzuyla isteklerinizi birçok farklı "kullanıcı" arasında dağıtır, böylece hiçbir IP Avito'nun hız sınırlarını aşmadan yüksek hacimde istek gönderebilirsiniz.
- Geo-targeting: bazı veriler veya fiyatlar bölgeye özgü olabilir. Geo-targeting yeteneği olan proxy'ler (örneğin belirli Rus şehirleri veya bölgeleri) yerelleştirilmiş verileri doğru biçimde toplamanızı sağlar. Örneğin GProxy, residential ve mobil ağları için kapsamlı geo-targeting seçenekleri sunar.
- Daha yüksek başarı oranı: doğru yapılandırılmış bir proxy kurulumu, parsing işlemlerinizin başarı oranını çarpıcı biçimde artırır; CAPTCHA, engelleme ve boş yanıt sıklığını azaltır.
Avito parsing için proxy türleri
Doğru proxy türünü seçmek kritiktir ve parsing ihtiyaçlarınıza, bütçenize, istediğiniz anonimlik ve güven seviyesine bağlıdır.
- Residential proxy'ler: bu proxy'ler, internet servis sağlayıcılarının (ISP) gerçek ev kullanıcılarına atadığı IP adreslerini kullanır. Evlerinden internete giren meşru kullanıcılar gibi göründükleri için en güvenilir türdür.
- Artıları: son derece yüksek anonimlik, çok düşük engellenme oranı, gerçek kullanıcı davranışını taklit etme, çoğunlukla kapsamlı geo-targeting desteği. GProxy'nin residential ağı dünya genelinde milyonlarca IP sunar; yüksek güven gerektiren parsing için idealdir.
- Eksileri: genelde veri merkezi proxy'lerinden daha pahalıdır ve gerçek kullanıcı cihazları üzerinden yönlendirildiği için biraz daha yavaş olabilir.
- En uygun kullanım: tespit edilmemenin en öncelikli olduğu, uzun süre doğal kullanıcı davranışını taklit etmeniz gereken yüksek değerli, hassas parsing işleri.
- Veri merkezi proxy'leri: bu IP'ler residential ISP'lerden değil, ticari veri merkezlerinden gelir. Hızlı ve uygun maliyetlidir ama residential IP'lere göre daha az anonimdir.
- Artıları: yüksek hız, düşük maliyet, kararlı bağlantılar.
- Eksileri: gerçek ev kullanıcılarından gelmedikleri için Avito'nunki gibi gelişmiş anti-bot sistemleri tarafından daha kolay tespit edilip engellenir.
- En uygun kullanım: daha az agresif parsing, hızın kritik olduğu ve hedef sitenin anti-bot önlemlerinin zayıf olduğu işler ya da kritik olmayan veriler için ikincil seçenek.
- Mobil proxy'ler: mobil operatörlerin gerçek mobil cihazlara atadığı IP adreslerini kullanır. En yüksek güven seviyesini ve dinamik IP rotasyonunu sunar.
- Artıları: son derece yüksek güven, IP adresleri sık sık değişir (dinamik), yapıları gereği bot trafiği olarak tespit edilmesi çok zordur.
- Eksileri: en pahalı seçenek, veri merkezi proxy'lerinden daha yavaş olabilir, residential'a kıyasla geo-targeting seçenekleri sınırlıdır.
- En uygun kullanım: diğer proxy türlerinin başarısız olduğu, azami anonimlik ve güven gerektiren en zorlu parsing senaryoları.
Avito parsing için proxy türlerinin karşılaştırması
| Özellik | Residential proxy'ler | Veri merkezi proxy'leri | Mobil proxy'ler |
|---|---|---|---|
| Güven seviyesi (Avito) | Çok yüksek | Düşük–orta | En yüksek |
| Engellenme oranı | Çok düşük | Yüksek | Son derece düşük |
| Hız | Orta–yüksek | Çok yüksek | Orta |
| Maliyet | Yüksek | Düşük | Çok yüksek |
| IP kaynağı | Gerçek ISP'ler, tüketici cihazları | Ticari veri merkezleri | Mobil şebeke operatörleri, cihazlar |
| Anonimlik | Mükemmel | İyi (ama tespit edilebilir) | Üstün |
| Geo-targeting | Kapsamlı (şehir/bölge) | Sınırlı (ülke/bölge) | Orta (ülke/operatör) |
| Önerilen kullanım | Avito için birincil seçim; büyük ölçekli, hassas işler | Düşük yoğunluklu işler için yedek, ilk testler | Diğer her şey başarısız olduğunda, en öncelikli veriler, azami gizlilik |
Doğru proxy sağlayıcısını seçmek (GProxy)
Güvenilir bir proxy sağlayıcı seçmek, doğru proxy türünü seçmek kadar önemlidir. GProxy gibi seçenekleri değerlendirirken şunlara bakın:
- Geniş IP havuzu: devasa bir IP ağı (residential'da milyonlarca) tekrar kullanımı en aza indirir ve tespit edilme olasılığını azaltır. GProxy kapsamlı bir küresel ağa sahiptir.
- Coğrafi kapsam: sağlayıcının Avito parsing ihtiyaçlarınıza uygun bölgelerde, özellikle Rusya içinde IP sunduğundan emin olun.
- Rotasyonlu proxy'ler: sürdürülebilir parsing için otomatik IP rotasyonu şarttır.
- Hız ve güvenilirlik: istikrarlı uptime ve hızlı yanıt süreleri verimli veri toplama için hayati önemdedir.
- Kimlik doğrulama seçenekleri: hem IP doğrulaması hem de kullanıcı adı/parola desteği.
- Müşteri desteği: sorun giderirken hızlı yanıt veren bir destek paha biçilmezdir.
- Ölçeklenebilirlik: parsing ihtiyaçlarınız değiştikçe proxy kullanımınızı kolayca artırıp azaltabilme.

Avito parser'ınızın mimarisi: teknik derinlemesine bakış
Sağlam bir Avito parser'ı kurmak proxy'den ibaret değildir. Programlama araçlarının, stratejik istek yönetiminin ve titiz hata yönetiminin düşünülmüş bir birleşimini gerektirir. Bu bölüm, etkili bir parsing çözümü geliştirmek için gereken teknik bileşenleri ve en iyi uygulamaları anlatır.
Temel araçlar ve kütüphaneler
Basitliği, geniş kütüphane ekosistemi ve güçlü topluluk desteği sayesinde web scraping için başvurulan dil Python'dur.
requests: web istekleri yapmak için güçlü ve kullanıcı dostu bir HTTP kütüphanesi. Oturumları, kimlik doğrulamayı ve başlıkları zahmetsizce yönetir.BeautifulSoup4(bs4): HTML ve XML dosyalarından veri çıkarmak için bir kütüphane. Parse ağacında gezinmek, arama yapmak ve değişiklik yapmak için Python'a uygun bir yol sunar.lxml: XML ve HTML işlemek için hızlı, zengin özellikli ve kullanımı kolay bir kütüphane. Performans için sıklıkla BeautifulSoup'un arka uç parser'ı olarak kullanılır.Scrapy: Python için eksiksiz bir web crawling çatısı. İstek zamanlama, middleware ve item pipeline gibi özellikleriyle büyük ölçekli, karmaşık projeler için idealdir. Başlangıçta kurulumu daha karmaşık olsa da üstün kontrol ve ölçeklenebilirlik sağlar.Selenium: bir tarayıcı otomasyon aracı. Avito içeriği oluşturmak için büyük ölçüde JavaScript kullanıyorsa veya karmaşık etkileşimli öğeler varsa (telefon numarasını göstermek için tıklamak gibi), Selenium gerçek bir tarayıcıyı simüle ederek sayfaları yükleyebilir, JavaScript çalıştırabilir ve içeriği çıkarmadan önce öğelerle etkileşime girebilir. Bu daha yavaş ve daha fazla kaynak tüketen bir yaklaşımdır ama dinamik siteler için gerekli olabilir.
Parsing stratejisi
Verimli ve güvenilir veri çıkarımı için iyi tanımlanmış bir strateji şarttır.
- Hedef URL'leri belirleyin: kazımanız gereken ana kategorileri, arama sonucu sayfalarını ve tekil ilan sayfalarını belirleyerek başlayın. Örneğin Moskova'da "BMW X5" araması belirli bir URL yapısına sahiptir.
- Sayfalamayı yönetin: arama sonuçları genellikle birden fazla sayfaya yayılır. Parser'ınız, çoğunlukla URL'deki sayfa numarası parametresini artırarak bu sayfalar arasında ilerleyebilmelidir.
- Belirli veri noktalarını çıkarın: her ilan için ihtiyaç duyduğunuz veri noktalarını tam olarak tanımlayın:
- Başlık (заголовок объявления)
- Fiyat (цена)
- Açıklama (описание)
- Konum (адрес/местоположение)
- Satıcı bilgisi (имя продавца, тип продавца - частное лицо/компания)
- İletişim bilgisi (телефон, API çağrısı veya Selenium ile erişilebiliyorsa)
- Yayın tarihi (дата публикации)
- Görüntülenme sayısı (количество просмотров)
- Görseller (URLы изображений)
- Özel nitelikler (örneğin otomobiller için kilometre, daireler için oda sayısı).
- Dinamik içerikle başa çıkma:
- AJAX ile yüklenen içerik için: dinamik veriyi getiren temel API çağrılarını bulmak üzere tarayıcınızın geliştirici araçlarında ağ isteklerini inceleyin. Bu API'lere
requestsile doğrudan istek atmak Selenium kullanmaktan çok daha hızlı olabilir. - API çağrıları karmaşıksa veya içerik JavaScript'in derinlerine gömülüyse: veriyi çıkarmadan önce sayfayı tamamen oluşturmak için Selenium'u headless bir tarayıcıyla (Chrome Headless gibi) kullanın.
- AJAX ile yüklenen içerik için: dinamik veriyi getiren temel API çağrılarını bulmak üzere tarayıcınızın geliştirici araçlarında ağ isteklerini inceleyin. Bu API'lere
Proxy rotasyonunu uygulamak
GProxy hizmetlerinin işin ayrılmaz parçası hâline geldiği nokta burasıdır. Tek bir proxy kullanmak yerine bir proxy listesi tutar ve her istekte ya da belirli sayıda istekten sonra bunlar arasında rotasyon yaparsınız.
import requests
from bs4 import BeautifulSoup
import random
import time
# GProxy residential proxy listesi örneği
# Biçim: IP doğrulamalı proxy'ler için "http://user:password@ip:port" veya "http://ip:port"
# GProxy'de size atanan kullanıcı adı/parolayı kullanın ya da sunucu IP'nizi beyaz listeye ekleyin.
proxies_list = [
"http://user1:[email protected]:port",
"http://user2:[email protected]:port",
"http://user3:[email protected]:port",
# ... GProxy panelinizden daha fazla proxy ekleyin
]
def get_random_proxy(proxies):
return random.choice(proxies)
def fetch_page_with_proxy(url, proxies):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9,ru;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Connection": "keep-alive",
}
selected_proxy = get_random_proxy(proxies)
proxy_dict = {
"http": selected_proxy,
"https": selected_proxy,
}
try:
print(f"Fetching {url} using proxy: {selected_proxy.split('@')[-1]}")
response = requests.get(url, proxies=proxy_dict, headers=headers, timeout=15)
response.raise_for_status() # Hatalı yanıtlarda (4xx veya 5xx) HTTPError fırlatır
return response
except requests.exceptions.RequestException as e:
print(f"Error fetching {url} with proxy {selected_proxy}: {e}")
return None
# Kullanım örneği:
# url_to_scrape = "https://www.avito.ru/moskva/avtomobili"
# response = fetch_page_with_proxy(url_to_scrape, proxies_list)
# if response:
# soup = BeautifulSoup(response.text, 'lxml')
# # soup nesnesini işle
# print("Page fetched successfully.")
# else:
# print("Failed to fetch page.")
İstek başlıkları ve User-Agent'lar
Gerçek bir tarayıcıyı taklit etmek için isteklerinizde her zaman uygun HTTP başlıkları gönderin. User-Agent başlığı özellikle önemlidir. Gerçekçi User-Agent dizelerinden oluşan çeşitli bir küme kullanın ve tıpkı proxy'lerde olduğu gibi bunlarda da rotasyon yapın. Accept-Language, Accept-Encoding ve Referer gibi diğer yaygın başlıkları da ekleyin.
Hata yönetimi ve yeniden denemeler
Sağlam parser'lar hataları önceden hesaba katar. Şunlar için mekanizmalar kurun:
- HTTP hatalarını ele alma: 4xx (istemci hataları) ve 5xx (sunucu hataları) durumlarını yakalayın. 403 Forbidden çoğunlukla proxy'nin engellendiği anlamına gelir; 429 Too Many Requests durumunda hızı düşürün veya proxy değiştirin.
- Yeniden deneme mantığı: bir istek başarısız olursa (örneğin ağ hatası, proxy zaman aşımı), kısa bir gecikmeden sonra isteği farklı bir proxy ile tekrarlayın. Sunucuyu zorlamamak için yeniden denemelerde üstel geri çekilme (exponential backoff) kullanın.
- Proxy sağlık kontrolleri: proxy'lerinizin çalıştığını düzenli olarak doğrulayın. GProxy bunun için genellikle araçlar veya API'ler sunar.
- Loglama: tüm istekleri, yanıtları ve hataları kaydedin. Bu, parser'ınızın performansını izlemek ve hata ayıklamak için paha biçilmezdir.
Pratik örnek: proxy ile temel Avito ilan çıkarımı
Proxy kullanarak temel bir Avito arama sonuçları sayfasını nasıl çekeceğinizi ve ilk veri noktalarını nasıl çıkaracağınızı gösteren basitleştirilmiş bir Python örneğini adım adım inceleyelim. Bu örnek HTTP istekleri için requests, HTML parsing için BeautifulSoup kullanır.
Ortamınızı hazırlamak
Önce gerekli kütüphanelerin kurulu olduğundan emin olun:
pip install requests beautifulsoup4 lxml
Python kod örneği
Bu betik, GProxy listenizden rotasyonlu bir proxy kullanarak Moskova'daki "BMW X5" ilanlarının ilk sayfasını çeker.
import requests
from bs4 import BeautifulSoup
import random
import time
# --- GProxy yapılandırması (kendi gerçek GProxy bilgilerinizle değiştirin) ---
# Üretimde proxy'leri bir dosyadan veya ortam değişkenlerinden yüklemeniz önerilir
PROXIES = [
"http://gproxyuser:[email protected]:10000",
"http://gproxyuser:[email protected]:10001",
"http://gproxyuser:[email protected]:10002",
# Gerektiği kadar GProxy residential IP ekleyin.
# IP doğrulaması için, sunucu IP'nizi GProxy panelinde beyaz listeye ekledikten sonra sadece "http://ip:port" kullanın.
]
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15"
]
def get_random_header():
return {
"User-Agent": random.choice(USER_AGENTS),
"Accept-Language": "en-US,en;q=0.9,ru;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"Connection": "keep-alive",
"DNT": "1", # Do Not Track
}
def fetch_avito_page(url, proxy_list, retries=3):
for attempt in range(retries):
proxy = random.choice(proxy_list)
proxies = {
"http": proxy,
"https": proxy,
}
headers = get_random_header()
print(f"Attempt {attempt + 1}: Fetching {url} with proxy {proxy.split('@')[-1]}")
try:
response = requests.get(url, proxies=proxies, headers=headers, timeout=20)
response.raise_for_status() # Hatalı yanıtlarda (4xx veya 5xx) HTTPError fırlatır
return response
except requests.exceptions.RequestException as e:
print(f"Error fetching {url} (Proxy: {proxy.split('@')[-1]}): {e}")
time.sleep(random.uniform(5, 10)) # Yeniden denemeden önce bekle
return None
def parse_avito_listings(html_content):
soup = BeautifulSoup(html_content, 'lxml')
listings_data = []
# Avito'nun HTML yapısı değişebilir, bu yüzden bu seçiciler yalnızca örnektir.
# Doğru seçicileri bulmak için sayfanın güncel HTML'ini her zaman inceleyin.
listings = soup.find_all('div', {'data-marker': 'item'})
# Ya da eski/farklı yapılar için: soup.select('div.iva-item-body-KzKpW')
if not listings:
print("No listings found with the current selector. HTML structure might have changed.")
# Daha genel bir yaklaşım deneyin veya incelemek için HTML'i loglayın
# print(html_content[:1000]) # Hata ayıklama için HTML'in ilk 1000 karakterini yazdır
return listings_data
for listing in listings:
title_tag = listing.find('h3', {'itemprop': 'name'}) or listing.find('a', {'itemprop': 'url'})
title = title_tag.get_text(strip=True) if title_tag else 'N/A'
url_tag = listing.find('a', {'itemprop': 'url'})
listing_url = "https://www.avito.ru" + url_tag['href'] if url_tag and 'href' in url_tag.attrs else 'N/A'
price_tag = listing.find('span', {'data-marker': 'item-price'}) or listing.find('span', class_='price-text-E1Y7h')
price = price_tag.get_text(strip=True) if price_tag else 'N/A'
location_tag = listing.find('div', {'data-marker': 'item-address'}) or listing.find('span', class_='geo-text-sgaKj')
location = location_tag.get_text(strip=True) if location_tag else 'N/A'
date_tag = listing.find('div', {'data-marker': 'item-date'}) or listing.find('div', class_='date-text-Km--s')
date_posted = date_tag.get_text(strip=True) if date_tag else 'N/A'
listings_data.append({
'title': title,
'url': listing_url,
'price': price,
'location': location,
'date_posted': date_posted
})
return listings_data
if __name__ == "__main__":
search_query = "BMW X5"
# Moskova'da "BMW X5" araması için örnek Avito URL'i
# Not: Avito URL'leri genellikle bölge kodları içerir (örneğin Moskova için /moskva/)
base_url = f"https://www.avito.ru/moskva?q={search_query.replace(' ', '+')}"
# Sayfalama için genellikle sayfa numaraları üzerinde döngü kurarsınız:
# for page_num in range(1, 5): # İlk 4 sayfayı kazı
# page_url = f"{base_url}&p={page_num}"
# response = fetch_avito_page(page_url, PROXIES)
# if response:
# parsed_data = parse_avito_listings(response.text)
# for item in parsed_data:
# print(item)
# time.sleep(random.uniform(2, 5)) # Sayfalar arasında saygılı gecikme
# else:
# print(f"Failed to fetch page {page_num}. Moving to next or stopping.")
response = fetch_avito_page(base_url, PROXIES)
if response:
print("\n--- Successfully fetched Avito page ---")
listings = parse_avito_listings(response.text)
if listings:
print(f"Found {len(listings)} listings:")
for i, item in enumerate(listings[:5]): # Kısa olsun diye ilk 5'ini yazdır
print(f"Listing {i+1}:")
print(f" Title: {item['title']}")
print(f" Price: {item['price']}")
print(f" Location: {item['location']}")
print(f" URL: {item['url']}")
print("-" * 20)
else:
print("No listings parsed. Check selectors or page content.")
else:
print("Failed to fetch the Avito page after multiple attempts.")
Ölçeklendirme hususları
Daha büyük ölçekli operasyonlar için şu iyileştirmeleri düşünün:
- Asenkron istekler:
aiohttpile birlikteasynciogibi kütüphaneler birden fazla isteği eşzamanlı yapabilir ve parsing sürecini önemli ölçüde hızlandırır. - Dağıtık parsing: gerçekten devasa projelerde parsing görevlerinizi birden fazla makineye veya bulut örneğine dağıtın.
- Veritabanı depolama: konsola yazdırmak yerine, çıkarılan veriyi daha kolay analiz ve erişim için yapılandırılmış bir veritabanında (SQL, NoSQL) saklayın.
- Anti-tespit iyileştirmeleri: daha da insan gibi görünmek için çerez yönetimi, referrer başlıkları ve hatta fare hareketi simülasyonu (Selenium ile) gibi ileri teknikler uygulayın.

Web scraping'in etik ve hukuki çerçevesi
Web scraping büyük iş avantajları sunsa da etik sınırlar ve hukuki çerçeve içinde hareket etmek kritiktir. Bunları göz ardı etmek dava, IP engelleri ve itibar kaybı dahil ağır sonuçlar doğurabilir. Sorumlu veri toplama uygulamalarına her zaman öncelik verin.
Hizmet Şartlarına (ToS) saygı
Avito dahil çoğu web sitesinin, otomatik erişimi açıkça düzenleyen Hizmet Şartları vardır. Bu şartlar genellikle şunları yasaklar:
- Açık izin olmadan otomatik kazıma.
- Sunucu kaynaklarını zorlayabilecek aşırı istekler.
- İçeriğin kaynak gösterilmeden veya izinsiz yeniden yayımlanması.
Büyük ölçekli bir parsing'e başlamadan önce Avito'nun Hizmet Şartlarını inceleyin. Birçok şirket ToS kısıtlamalarına rağmen herkese açık verileri kazımayı tercih etse de olası riskleri anlamak önemlidir. GProxy gibi sağlayıcıların yüksek kaliteli residential proxy'lerini kullanmak tespit edilmeyi azaltmaya yardımcı olur, ancak ToS ihlallerinin hukuki sonuçlarını ortadan kaldırmaz.
Veri gizliliği (GDPR, CCPA ve Rusya veri yasaları)
Veri gizliliğine ilişkin hukuki çerçeve karmaşıktır ve ülkeden ülkeye değişir. Öne çıkan hususlar:
- Herkese açık veriler ile özel veriler: genel olarak herkese açık görünen verileri kazımak (örneğin ürün başlıkları, fiyatlar, açıklamalar), özel kullanıcı verilerine erişmeye çalışmaktan daha az sorunludur.
- Kişisel veriler: bir kişiyi tanımlayabilecek herhangi bir veriyi toplarken son derece dikkatli olun (örneğin isimler, telefon numaraları, e-posta adresleri, bir bireye bağlıysa spesifik konum). GDPR (Avrupa), CCPA (Kaliforniya) ve Rusya'nın 152-FZ sayılı "Kişisel Veriler Hakkında" Federal Kanunu gibi düzenlemeler, kişisel verilerin toplanması, işlenmesi ve saklanması konusunda katı kurallar getirir. Kişisel veri topluyorsanız bunun için meşru bir dayanağınız olduğundan emin olun, verileri güvenli biçimde işleyin ve veri sahiplerinin haklarına saygı gösterin.
- Rıza: kişisel veriler için çoğunlukla açık rıza gerekir. Scraping yoluyla rıza almanız mümkün olmadığından, kesinlikle gerekli ve hukuken izin verilir olmadıkça kimliği belirlenebilir kişisel bilgi toplamaktan kaçının.
Telif hakkı ve fikri mülkiyet
Avito'daki içerik, örneğin ilan açıklamaları, kullanıcı tarafından üretilen metinler ve özellikle görseller, çoğunlukla telif hakkına tabidir.
- Görseller: kazınmış görselleri izinsiz yeniden kullanmak doğrudan telif hakkı ihlalidir. Görsel kazıyorsanız, amaçlanan kullanım için lisansınız veya açık izniniz olduğundan emin olun.
- Metin içeriği: olgular genellikle telif hakkına tabi olmasa da bunların belirli ifade biçimi (açıklama, ilan metni) tabidir. Büyük metin bölümlerini doğrudan kopyalayıp yeniden yayımlamaktan kaçının.
Sorumlu scraping için en iyi uygulamalar
Riskleri en aza indirmek ve etik davranmak için:
robots.txtdosyasına uyun:www.avito.ru/robots.txtadresindeki bu dosya web crawler'lar için yönergeler sunar. Hukuken bağlayıcı olmasa da ona uymak iyi niyet göstergesidir. Ticari scraper'ların bu direktifleri sıklıkla yok saydığını unutmayın; yine de bu önemli bir etik husustur.- İstek hızını sınırlayın: istekleri makul bir tempoda gönderin. İnsan gezinmesini taklit etmek ve sunucuyu zorlamamak için istekler arasına rastgele gecikmeler koyun (örneğin
time.sleep(random.uniform(2, 5))). - Kendinizi tanıtın: şirket adınızı veya iletişim bilgilerinizi içeren açıklayıcı bir
User-Agentdizesi kullanın (örneğinMyCompanyBot/1.0 ([email protected])). Böylece site sahibi sorun olduğunda doğrudan IP'nizi engellemek yerine sizinle iletişime geçebilir. - Yalnızca herkese açık veriyi kazıyın: parola korumalı alanlara veya herkese açık gösterilmeyen verilere erişmeye asla çalışmayın.
- Verileri güvenli saklayın: hassas bilgi topluyorsanız (herkese açık olsa bile), bunların güvenli biçimde ve ilgili veri koruma yasalarına uygun olarak saklandığından emin olun.
- İzleyin ve uyum sağlayın: parsing faaliyetlerinizi ve Avito sitesindeki yapı ya da anti-bot önlemi değişikliklerini sürekli takip edin. Betiklerinizi ve proxy stratejinizi uyarlamaya hazır olun.
Öne çıkan sonuçlar
Avito parsing; pazar istihbaratı, rakip verileri ve potansiyel müşteri bulma arayışındaki şirketler için güçlü bir araçtır. Ancak başarı, sağlam bir teknik stratejiye ve anti-bot önlemlerinin derinlemesine anlaşılmasına bağlıdır; bu da proxy'leri vazgeçilmez bir bileşen hâline getirir.
- Proxy'ler pazarlık konusu değil: güvenilir bir proxy çözümü olmadan büyük ölçekli Avito parsing pratikte imkânsızdır. GProxy'nin sunduğu gibi residential proxy'ler en yüksek güven ve anonimlik seviyesini sağlar ve IP engellenme riskini belirgin biçimde azaltır.
- Teknik yetkinlik anahtardır: başarılı bir parser; Python ile
requestsveBeautifulSoup(daha karmaşık senaryolardaScrapy/Selenium) gibi araçlarda yetkinlik ve bunun yanında IP rotasyonu, gerçekçi user-agent'lar ve kapsamlı hata yönetiminin stratejik biçimde uygulanmasını gerektirir. - Etik ve hukuki uyum: her zaman etik scraping uygulamalarına öncelik verin, Avito'nun Hizmet Şartlarına saygı gösterin ve veri gizliliği yasalarına uyun. Herkese açık verilere odaklanın ve açık bir hukuki dayanak olmadan kişisel bilgi toplamaktan kaçının.
Avito parsing başarınızı en üst düzeye çıkarmak için iyi tanımlanmış bir veri hedefiyle başlayın, GProxy gibi yüksek kaliteli bir proxy hizmetine yatırım yapın ve parser'ınızı dayanıklılık ile etik hususları merkeze alarak kurun.
Bunları da okuyun
Facebook Ads için Proxy: Her Konumdan Reklam Yayınlama
Twitch için proxy'ler: yayın ve izlenme artırma
Trafik arbitrajı için proxy'ler: multi-accounting ve cloaking
Yapay zekâ için proxy'ler: ChatGPT, Midjourney, Claude erişimi
E-posta Pazarlaması ve Toplu Gönderim için Proxy'ler
