Giriş: sonunda ne elde edeceksiniz

Yorumlar bir ürün, mağaza veya mekân hakkında en dürüst bilgi kaynağıdır. İnsanlar neyi sevdiklerini, neyin bozulduğunu, neden bir daha dönmeyeceklerini ve arkadaşlarına ne tavsiye edeceklerini kendileri anlatır. Sorun şu ki yorumlar onlarca platforma dağılmış durumda: haritalar, pazaryerleri, toplayıcılar, sektörel kataloglar. Bunları haftalarca elle okumak imkânsız. Bu yüzden sistematik toplama gerekir.

Bu rehberde üç tür platformdan yorum toplamayı ele alacağız: harita servisleri (Yandex Haritalar, 2GIS, Google Maps), pazaryerleri (Wildberries, Ozon, Yandex Market) ve toplayıcılar (Otzovik, iRecommend, Flamp, Zoon). Tüm süreci baştan sona geçeceksiniz: görevi tanımlamaktan ve tablo tasarlamaktan çalışan bir betiğe, mobil proxy bağlamaya ve veri temizlemeye kadar.

Sonunda ne elde edeceksiniz:

  • Her platform türünde yorumların nerede ve hangi biçimde bulunduğunu anlama.
  • Excel, Google E-Tablolar veya veritabanına yüklenebilecek hazır bir yorum tablosu yapısı.
  • Mobil proxy üzerinden giden ve platformları aşırı yüklemeyen Python tabanlı çalışan bir yorum kazıyıcı.
  • Resmi veri çıkarma yolları hakkında bilgi: kişisel paneller, iş ortağı API'leri, dışa aktarmalar.
  • Toplanan verilerin kalite kontrol listesi ve sık yapılan hataların listesi.

Bu rehber kimler için. Pazarlamacılar, işletme sahipleri, arbitraj uzmanları ve yeni başlayan geliştiriciler için tasarlandı. Daha önce hiç kod yazmadıysanız korkmayın. Bazı senaryolar programlama olmadan bile yapılabilir; betikler için ise kopyalayıp kendi değerlerinizi girmeniz gereken hazır parçalar veriyoruz. Zaten programlama bilenler için sonunda ileri teknikler içeren ayrı bir bölüm var.

Önceden bilmeniz gerekenler. Tarayıcı kullanmayı, program kurmayı ve tablolarla çalışmayı bilmek yeterli. Proxy'nin ne olduğuna dair temel bir fikir yardımcı olur ama önemli terimleri yol boyunca açıklayacağız.

Bu materyalin önemli sınırı. Burada sadece yorumları ayrı bir veri türü olarak ele alıyoruz: metin, puan, tarih, yazar, şirket yanıtı. Ürün kataloglarını, fiyatları ve stokları kazımayı ele almıyoruz; bu, kendine özgü özellikleri olan ayrı bir konu. Fiyatlar lazımsa bu rehber uygun değil; müşteri geri bildirimi lazımsa doğru yerdesiniz.

Ne kadar zaman gerekir. Ortam hazırlığı yaklaşık 30-40 dakika sürer. Yapı tasarımı ve bir platformdan ilk toplama yaklaşık bir saat. Üç platform türünün tamamında proxy kurulumu ve veri temizliği ile tam tur 3-4 saat sürer. Sonrasında toplama dakikalar alır çünkü betiği tekrar tekrar çalıştırabilirsiniz.

Ön hazırlık: araçlar ve erişimler

Yorum toplamaya başlamadan önce çalışma ortamını hazırlamak gerekir. Aşağıda ihtiyaç duyacağınız şeylerin listesi var. Bir şey bariz görünse bile bu bölümü atlamayın: sonraki adımlardaki sorunların yarısı tam da hazırlanmamış ortamdan kaynaklanır.

Sistem gereksinimleri

  • Windows 10/11, macOS veya Linux bilgisayar. Son 6-7 yılın herhangi bir dizüstü bilgisayarı uygundur.
  • En az 4 GB RAM. On binlerce yorum toplamak için 8 GB daha iyi.
  • Kararlı internet. Toplama yüksek hız gerektirmez ancak bağlantı kopmaları veri kaybına yol açar.
  • Python, kütüphaneler ve sonuçlar için diskte yaklaşık 2 GB boş alan.

Kurulması gerekenler

  1. Python 3.11 veya üzeri. Python'un resmi sitesinden kurulum dosyasını indirin. Windows'ta kurulum sırasında ilk ekranda mutlaka "Add Python to PATH" kutusunu işaretleyin. Bu olmadan terminalde python komutu çalışmaz.
  2. Kod editörü. VS Code uygundur — ücretsiz ve anlaşılır. Kurduktan sonra bir kez açıp çalıştığından emin olun.
  3. Python kütüphaneleri. Terminali açın (Windows'ta PowerShell, macOS'ta Terminal) ve şu komutu çalıştırın: pip install requests pandas openpyxl. "Successfully installed" mesajını bekleyin. 1-2 dakika sürer.
  4. Chrome veya Yandex Browser. Platformları geliştirici araçlarıyla incelemek için gerekli. Tarayıcıya entegredir, ayrıca bir şey kurmanıza gerek yok.
  5. Tablo editörü. Excel, LibreOffice Calc veya Google E-Tablolar — sonuçları görmek için.

Hangi erişimler gerekli

  • Mobil proxy erişimi. mobileproxy.space sitesine kaydolun, istediğiniz coğrafi konuma sahip tarifeyi seçin (Rus platformları için Rus operatörler) ve bağlantı bilgilerini alın: host, port, kullanıcı adı, şifre. Ayrıca kişisel panelde IP değiştirme bağlantısını bulun — rotasyon adımında gerekli olacak.
  • Platformların kişisel panellerine erişim, kendi işletmenizle ilgili yorumları topluyorsanız. Bunlar Yandex Business, Wildberries satıcı paneli, Ozon Seller, satıcılar için Yandex Market, Google Business Profile'dır. Resmi dışa aktarmalar en temiz kaynaktır.
  • Proje klasörü. Diskte bir klasör oluşturun, örneğin reviews_project, içine iki alt klasör açın: raw ham veriler için ve clean işlenmiş veriler için. Bu sizin sigortanızdır: ham veriler asla üzerine yazılmaz.

İpucu: Proje klasöründe hemen sources.txt adlı bir metin dosyası oluşturun ve yorum topladığınız her adresi tarihiyle birlikte buraya yazın. Bir ay sonra hangi tablonun nereden geldiğini hatırlamayacaksınız; böyle bir günlük tüm soruları çözer.

Yedeklemeler

Yedekleme burada sistemle değil verilerle ilgilidir. Şu kuralı benimseyin: her kazıyıcı çalıştırması sonucu tarih içeren yeni bir dosyaya yazar, örneğin reviews_ozon_2026-03-14.csv. Eski dosyaları en az bir ay silmeyin. Yeni toplama platformdaki değişiklikler yüzünden bozuk çıkarsa elinizde çalışan bir sürüm kalır.

Kontrol: Terminalde python --version yazın — 3.11 veya üzeri bir sürüm görünmeli. Sonra python -c 'import requests, pandas; print(1)' yazın — hatasız 1 rakamı çıkmalı. İki komut da çalıştıysa ortam hazır.

Temel kavramlar: yorumlar nasıl yapılandırılmıştır ve neden kataloglardan farklı toplanır

Bir şey çalıştırmadan önce hangi veri türüyle çalıştığınızı anlamak önemli. Yorum sadece metin değildir. Birkaç alanı olan yapılandırılmış bir kayıttır ve ürün kartında olmayan özellikleri vardır.

Anahtar terimler basit dille

  • Yorum (review) — bir kullanıcının bir nesne hakkında bıraktığı kayıt: ürün, mağaza, mekân. Genellikle puan, metin, tarih, yazar adı ve bazen fotoğraf içerir.
  • Yorum nesnesi — yorumun yapıldığı şey: pazaryerinde ürün kartı, haritada kuruluş, toplayıcıda şirket. Her nesnenin platformda benzersiz bir kimliği vardır.
  • Şirket yanıtı — bir işletme temsilcisinin yorumun altına yazdığı cevap. Destek kalitesini analiz etmek için ayrı bir alandır.
  • Sayfalama — yorumların sayfalara veya parçalara bölünmesi. Platform örneğin bir seferde 20 yorum verir ve sonraki parçaları talep etmek gerekir.
  • Yorum kazıyıcı — gerekli nesneleri otomatik gezen, yorumları çıkaran ve tabloya koyan program. Basit bir betik veya hazır bir servis olabilir.
  • Tekilleştirme — tekrarları kaldırma. Aynı yorum sayfalama veya tekrarlanan çalıştırmalar yüzünden seçime iki kez girebilir.
  • Mobil proxy'ler — mobil operatör IP adreslerine sahip ara sunucular. Bunlar üzerinden yapılan istekler normal bir akıllı telefon kullanıcısının trafiği gibi görünür. Platformlar bu tür trafiğe daha hoşgörülüdür çünkü bir mobil IP'nin arkasında yüzlerce gerçek insan vardır.
  • IP rotasyonu — proxy adresinin belirli aralıklarla veya istek üzerine değiştirilmesi. Yükü dağıtmaya ve tek adresten anormal istek akışı oluşturmamaya yardımcı olur.

Yorum toplamanın katalog toplamadan farkı

Ürün kataloğu görece statiktir: kart var, fiyatı ve özellikleri var. Yorumlar ise farklı yaşar ve bu tüm süreci etkiler.

  • Yorumlar sürekli eklenir. Her seferinde her şeyi yeniden çekmek yerine sadece yenilerini indirebilmek gerekir.
  • Yorumlar ayrı yüklenir. Çoğu platformda yorum metni sayfanın kendisinde değil, arka planda ayrı bir istekle gelir. Bu iyi haber: bu tür istekler hazır JSON döndürür, HTML ayrıştırmaya gerek yok.
  • Yorumlar kişisel veri içerir. Yazar adı, avatar, bazen şehir. Bununla ilgili yasal gereklilikler var — aşağıda.
  • Yorumlar sıralanır ve filtrelenir. Varsayılan olarak platform "faydalı" veya "yeni" gösterebilir. Sıralamayı sabitlemezseniz farklı çalıştırmalarda farklı kümeler toplarsınız.
  • Yorumlar düzenlenir ve silinir. Moderasyon bazı kayıtları kaldırır, yazarlar puanları değiştirir. Toplama tarihi önemli bir alan haline gelir.

Anlaşılması gereken yasal çerçeve

Dikkat: Yorumlar kişilerin adlarını ve diğer bilgilerini içerir. Toplama ve saklama sırasında 152-FZ sayılı Federal Kanun'un kişisel verilerle ilgili gerekliliklerine uyun: görev için gerekenden fazlasını toplamayın, analiz için ad gerekmiyorsa yazarları anonimleştirin, veritabanını üçüncü taraflara aktarmayın. Ayrıca platformun kullanıcı sözleşmesini ve robots.txt dosyasını okuyun: bazı servisler otomatik erişim için izin verilen modları açıkça tanımlar. Göreviniz için resmi bir API veya kişisel panelden dışa aktarma varsa her zaman ondan başlayın.

Bir diğer ilke de saygılı yükleme. Yorum kazıyıcınız bir istek akışı gibi değil, dikkatli bir kullanıcı gibi davranmalı. İstekler arasında duraklamalar, makul sayıda iş parçacığı ve mobil proxy'ler üzerinden rotasyon bir hile değil, sorumlu toplamanın normudur. Platformlar otomasyonun kendisini değil, işlerini engelleyen anormal davranışı engeller.

Adım 1: Amacı belirleyin ve kaynak listesi oluşturun

Bu aşamanın amacı: yorum toplayacağımız nesnelerin somut ve sınırlı bir listesini elde etmek ve hangi alanlara ihtiyacımız olduğunu anlamak. Bu adım olmadan kazıyıcı sonsuz bir projeye dönüşür.

Yorumların cevaplayacağı soruyu formüle edin

İyi bir toplama bir soruyla başlar. Çalışan ifade örnekleri:

  • «Rakip X'in Wildberries'deki puanı 4,8 iken bizim aynı kategorideki puanımız neden 4,4?»
  • «Son altı ayda beş kahve dükkânımız hakkında Yandex Haritalar'daki yorumlarda en çok neye kızılıyor?»
  • «Müşteriler çevrimiçi kurslarla ilgili Otzovik'teki yorumlarda hangi sorunları dile getiriyor, bunları reklam metinlerinde kullanmak için?»

Dikkat edin: her soruda platform, nesne, dönem ve bilgi türü var. Toplama ayarlarını belirleyen tam da bunlardır.

Nesne listesini oluşturun

  1. Tarayıcıda platformu açın ve gereken her nesneyi elle bulun: ürün kartı, haritadaki kuruluş, toplayıcıdaki şirket sayfası.
  2. Adres çubuğundan sayfanın tam adresini kopyalayın.
  3. Adresten nesne kimliğini çıkarın. Wildberries'de kart adresinde catalog/ sonrasındaki sayı, Ozon'da product/ sonrası ve sonundaki tire öncesi sayı, Yandex Haritalar'da org/ ve addan sonraki uzun sayı, 2GIS'te firm/ sonrasındaki sayı. Ayrı olarak kaydedin.
  4. Hepsini sources.csv dosyasına şu sütunlarla yazın: platform, nesne adı, adres, kimlik, yorum.
  5. İlk çalıştırma için platform başına 3-5 nesneyle sınırlı kalın. Ölçeklendirmeyi sonra yapacaksınız.

Hangi alanların gerekli olduğuna karar verin

Herhangi bir yorum için minimum alan seti: platformdaki yorum kimliği, nesne kimliği, platform, puan, metin, yayın tarihi, toplama tarihi. Genişletilmiş set: yazar adı (veya hash'i), fotoğraf olup olmadığı, artılar ve eksiler ayrı ayrı (pazaryerlerinde ve Otzovik'te var), şirket yanıtı ve tarihi, beğeni veya "faydalı" işareti sayısı, ürün varyantı (beden, renk), onaylanmış satın alma durumu.

İpucu: Tüm alanları birden kovalamayın. Minimum seti artı sorunuz için gerçekten gerekli 2-3 alanı toplayın. Her fazla alan, platform düzeninin değişip betiği bozabileceği fazladan bir yerdir.

Beklenen sonuç: 5-15 satırlı sources.csv dosyası ve kayıtlı alan listesi. Her satırın doldurulmuş bir kimliği var.

Olası sorunlar: adreste kimliğin nerede olduğu anlaşılamıyor. Çözüm: aynı platformda iki benzer nesne açın ve adresleri karşılaştırın — eşleşen kısımlar şablon, farklılaşanlar kimliktir.

Kontrol: sources.csv'deki herhangi bir satırı okuyup tek bir kimlikle platformdaki ilgili nesneyi elle açabilirsiniz. Bunun için tahmin yürütmeniz gerekiyorsa geri dönün ve kimlikleri netleştirin.

Adım 2: Yorum tablosunu tasarlayın

Bu aşamanın amacı: tüm platformlardan gelen yorumların yönlendirileceği tek bir kayıt biçimini sabitlemek. Bu, onları beş ayrı tablo yerine birlikte analiz etmenizi sağlar.

Birleşik şema

Kod editöründe schema.txt dosyası oluşturun ve sütunları şu sırayla listeleyin:

  1. review_id — platformdaki yorum kimliği. Platform açıkça vermiyorsa nesne, yazar ve tarihten kendimiz oluştururuz.
  2. source — platformun kısa kodu: yandex_maps, 2gis, google_maps, wildberries, ozon, yandex_market, otzovik, irecommend, flamp, zoon.
  3. object_id — sources.csv'deki nesne kimliği.
  4. object_name — kolaylık için okunabilir ad.
  5. rating — 1 ile 5 arası sayı. Platform farklı bir ölçek kullanıyorsa beşli ölçeğe dönüştürüp bunu yoruma yazarız.
  6. text — yorumun tam metni tek satırda. Satır sonlarını boşlukla değiştiririz.
  7. pros ve cons — platform ayırıyorsa artılar ve eksiler. Aksi halde boş.
  8. author — yazar adı veya anonimleştirilmiş hash'i.
  9. published_at — yayın tarihi YYYY-AA-GG biçiminde.
  10. company_reply — varsa şirket yanıtının metni.
  11. likes — faydalılık işareti sayısı.
  12. has_photo — 1 veya 0.
  13. collected_at — toplama tarihi ve saati.
  14. url — nesne sayfasının adresi.

Neden tam olarak birleşik biçim gerekli

Her platform veriyi kendi biçiminde verir: bir yerde tarih "3 gün önce" dizesi, bir yerde milisaniye sayısı, bir yerde "14 Mart" metni. Girişte her şeyi ortak bir biçime getirmezseniz analizde istisnalar içinde boğulursunuz. Şemaya dönüştürme kayıt sırasında hemen yapılmalı, sonra değil.

Anonimleştirme kuralları

Görev için yazar adları gerekli değilse (ve analitik görevlerin %90'ında gerekli değil), ad yerine hash saklayın. Python'da bu hashlib modülüyle tek satırda yapılır: yazar adı alınır, platform kodu eklenir ve sonuç kısa bir dizeye dönüştürülür. Böylece aynı yazarın yorumlarını birbirinden ayırt edebilirsiniz ama adın kendisini saklamazsınız.

İpucu: Şemaya raw_json sütunu ekleyin, ilgili yoruma ait platformun ham yanıtı buraya yazılır. Yer kaplar ama bugün düşünmediğiniz bir alanı yeniden toplama yapmadan sonradan çıkarmanıza olanak tanır.

Beklenen sonuç: sütunları içeren schema.txt dosyası ve bu başlıklara sahip boş bir reviews_template.csv şablonu.

Kontrol: reviews_template.csv'yi Excel'de açın. schema.txt'deki sütunlardan tam olarak oluşan ve fazladan hiçbir şey içermeyen bir başlık satırı görmelisiniz.

Adım 3: Resmi yolları kullanın — paneller ve API'ler

Bu aşamanın amacı: kendi işletmenizle ilgili yorumları en temiz yolla, kazıma yapmadan çıkarmak. Sadece kendinizi analiz ediyorsanız bu adım yeterli olabilir.

Yandex Business (Yandex Haritalar'daki yorumlar)

  1. Kuruluş sahibi hesabıyla Yandex Business'a giriş yapın.
  2. Sol menüden «Yorumlar» bölümünü seçin.
  3. Birden fazla kuruluş varsa üstten istediğiniz şubeyi seçin.
  4. Dönem ve puana göre filtreyi ayarlayın.
  5. Yorum listesi metin, tarih, puan ve yanıtlarınızla birlikte görüntülenir. Doğrudan tabloya dışa aktarma düğmesi yok, bu nedenle büyük hacimler için sayfa sayfa kopyalama kullanın veya 4. adıma geçin.

Wildberries: satıcılar için yorum API'si

Wildberries'in yorum ve sorularla çalışmak için resmi bir API bölümü vardır. Satıcılara açıktır ve ürünlerinizle ilgili yorumları puan, metin, artılar ve eksiler, tarih ile birlikte verir ve yanıtlamanıza da olanak tanır.

  1. WB Partners satıcı paneline giriş yapın.
  2. Profil ayarlarından «API Erişimi» bölümünü açın.
  3. Yorumlar ve sorular için erişim kategorisini işaretleyerek yeni bir token oluşturun. Anlaşılır bir ad verin, örneğin reviews_export.
  4. Token'ı hemen kopyalayın — tekrar gösterilmez. Proje klasöründeki config.txt dosyasına kaydedin.
  5. Yorum listesi metodlarına bu token'ı Authorization başlığında kullanarak başvurun. Dokümantasyon sayfalama ve tarihe göre filtreleme parametrelerini açıklar.

Ozon Seller API ve Yandex Market

Ozon, yorumlarla çalışmayı içeren aboneliğe sahip satıcılar için Seller API aracılığıyla yorumlara erişim sağlar. Anahtar «Ayarlar» bölümünün «API anahtarları» alt bölümünde oluşturulur. Yandex Market, satıcının ürünleriyle ilgili yorumları işletme kimliğine göre iş ortağı API'si üzerinden verir, anahtar satıcı panelinde erişim ayarları bölümünde düzenlenir.

Google Business Profile ve 2GIS for Business

Kendi kuruluşunuzla ilgili Google Maps'teki yorumlar Google Business Profile panelinden ve haklar onaylandıktan sonra API'sinden erişilebilir. 2GIS, sahiplere yorum bildirimleri ve yanıtlama olanağı sunan bir panel sunar.

Dikkat: Token'lar ve API anahtarları işletme hesabınıza erişimdir. Bunları asla doğrudan koda yapıştırmayın, ortak klasörlere ve depolara girmeyen ayrı bir dosyada saklayın. Token yanlışlıkla sızdıysa derhal panelden iptal edin ve yenisini oluşturun.

Resmi yolların yetmediği durumlar

Listelenen tüm yöntemler yalnızca sizin nesnelerinizle ilgili yorumları verir. Rakipleri, pazarı veya başkalarının ürünlerini analiz etmek için uygun değildir. Bu durumda genel sayfalardan toplamaya geçeriz — sonraki adımlar buna ayrılmıştır.

Beklenen sonuç: kendi işletmenizle çalışıyorsanız — resmi kaynaktan 2. adımdaki şemaya uygun ilk yorum tablosu.

Kontrol: Dışa aktarmadaki yorum sayısı, panelin aynı dönem için gösterdiği sayıyla örtüşür, dışa aktarma anında moderasyonda olan yorumlar için 1-2 kayıt sapma olabilir.

Adım 4: Haritalardan yorum toplama — Yandex Haritalar, 2GIS, Google Maps

Bu aşamanın amacı: haritanın yorumları yüklediği arka plan isteğini bulmayı ve betikle yeniden üretmeyi öğrenmek. Bu beceri evrenseldir ve diğer tüm platformlarda işinize yarar.

Geliştirici araçlarıyla yorum isteğini nasıl bulursunuz

  1. Chrome'da Yandex Haritalar veya 2GIS'te bir kuruluş sayfası açın.
  2. F12 tuşuna basın. Sağda veya altta geliştirici paneli açılır.
  3. Network (Ağ) sekmesine geçin. Boşsa sayfayı F5 ile yenileyin.
  4. İstek listesinin üzerindeki filtre çubuğunda Fetch/XHR düğmesine basın. Geriye sadece veri istekleri kalır.
  5. Kuruluş sayfasında yorumlar bölümüne geçin ve sonraki parçanın yüklenmesi için listeyi aşağı kaydırın.
  6. İstek listesinde yeni bir istek görünecek. Adında genellikle review veya feedback kelimesi geçer. Üzerine tıklayın.
  7. Preview veya Response sekmesini açın. İç içe liste halinde yorumların yer aldığı JSON yapısını göreceksiniz: metin, puan, tarih, yazar.
  8. Headers sekmesini açın. İsteğin tam adresini (Request URL) kopyalayın ve parametrelere dikkat edin: genellikle nesne kimliği, sayfa numarası veya kaydırma, parça boyutu ve sıralama vardır.
  9. Aynı bölümde istek başlıklarını bulun: User-Agent, Accept, Referer. Bunların betikten gönderilmesi gerekecek.

İpucu: Bulunan isteğe sağ tıklayın ve Copy, ardından Copy as cURL seçin. Tüm başlıkları içeren bir komut elde edersiniz. Bunu bir metin dosyasına referans olarak yapıştırmak kullanışlıdır: betik bir gün çalışmayı bırakırsa isteğini bununla karşılaştırırsınız.

Her haritanın özellikleri

  • Yandex Haritalar. Yorumlar sıralama belirtilerek parçalar halinde yüklenir (yeniliğe, puana, ilgi düzeyine göre). Mutlaka tek bir sıralama sabitleyin, aksi takdirde farklı çalıştırmalarda kümeler ayrışır. Tarih makine okunabilir biçimde, puan sayı olarak gelir. Kuruluş yanıtları ayrı bir iç içe alanda bulunur.
  • 2GIS. Servisin sitenin kendisinin başvurduğu genel bir yorum servisi vardır. İstek şube kimliği ile limit ve kaydırma parametrelerini içerir. Yanıtta metin, puan, tarih, kullanıcı adı, resmi yanıt ve faydalılık sayacı vardır. Ayrıca toplam yorum sayısı da gelir — bunu bütünlüğü kontrol etmek için kullanın.
  • Google Maps. Üçünün en zoru: yorumlar uzun yanıtlar içinde paketlenmiş biçimde gelir. Birkaç düzine nesne için resmi anahtarlı Places API kullanmak daha kolaydır — her yer için sınırlı sayıda son yorumu verir, bu da duygu analizi için çoğu zaman yeterlidir. Başkalarının nesneleri için tam toplama, tarayıcı otomasyonu gerektirir — bu ileri düzey bölümün konusudur.

İlk betiği yazalım

collect_maps.py dosyasını oluşturun ve iskeleti yapıştırın. İstek adresini ve alan adlarını geliştirici panelinde gördüklerinizden girin — bunlar platformlar arasında farklılık gösterir ve zamanla değişebilir.

import requests, time, csv, datetime
PROXY = 'http://LOGIN:PASSWORD@HOST:PORT'
proxies = {'http': PROXY, 'https': PROXY}
headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 Chrome/122 Mobile Safari/537.36', 'Accept': 'application/json'}
def fetch_page(url):
    r = requests.get(url, headers=headers, proxies=proxies, timeout=30)
    r.raise_for_status()
    return r.json()
def collect(object_id, base_url, limit=20):
    offset = 0
    rows = []
    while True:
        url = base_url.format(oid=object_id, limit=limit, offset=offset)
        data = fetch_page(url)
        items = data.get('reviews', [])
        if not items:
            break
        for it in items:
            rows.append({'review_id': it.get('id'), 'object_id': object_id, 'rating': it.get('rating'), 'text': (it.get('text') or '').replace(chr(10), ' '), 'published_at': it.get('date_created'), 'collected_at': datetime.datetime.now().isoformat()})
        offset += limit
        time.sleep(2.5)
    return rows

Burada ne olduğunu inceleyelim. PROXY değişkeni mobil proxy bilgilerinizi saklar. User-Agent başlığı isteği mobil tarayıcı olarak sunar — bu mobil IP ile mantıklı bir uyumdur. collect fonksiyonu platform boş liste döndürene kadar sayfaları gezer ve her sayfadan sonra 2,5 saniye duraklar. Duraklama formalite değildir: yükü canlı bir insanın okumasına benzetir.

Çalıştırma ve sonucu kaydetme

  1. Dosyanın sonunda sources.csv'deki bir nesne için fonksiyon çağrısı ve satırları csv modülüyle utf-8-sig kodlamasında CSV'ye yazma ekleyin, böylece Excel Rusça metni doğru açar.
  2. Proje klasöründe terminali açın ve python collect_maps.py çalıştırın.
  3. Çıktıyı izleyin. Her istekten sonra sayfa numarasını ve toplanan satır sayısını yazdırmak faydalıdır.
  4. Elde edilen dosyayı Excel'de açın ve ilk 20 satıra bakın.

Beklenen sonuç: bir kuruluşun yorumlarını içeren CSV dosyası, satır sayısı yaklaşık olarak kuruluş sayfasındaki yorum sayacına eşit.

Olası sorunlar: yanıt 403 koduyla veya boş geliyor. Çözüm: başlıkları kopyalanan cURL komutuyla karşılaştırın, özellikle Referer ve Accept. Proxy'nin bağlı olduğunu ve herhangi bir siteye test isteğine yanıt verdiğini kontrol edin. Duraklamayı 4-5 saniyeye çıkarın.

Kontrol: Dosyadan rastgele üç yorum alın ve metne göre kuruluş sayfasında bulun. Üçü de aynı puan ve tarihlerle bulunmalı.

Adım 5: Pazaryerlerinden yorum toplama — Wildberries, Ozon, Yandex Market

Bu aşamanın amacı: 4. adımdaki yaklaşımı, yorumları ürünlere bağlı olan ve ek alanları bulunan pazaryerlerine uyarlamak: artılar, eksiler, ürün varyantı, fotoğraf.

Wildberries

Wildberries'de yorumlar ürün koduna değil, renk ve bedenlerin gruplandığı kartın birleştirici kimliğine bağlıdır. Bu önemli: ürün koduna göre toplarsanız tüm varyantlar için birden alırsınız ve varyant alanına göre filtrelemeniz gerekir.

  1. Ürün kartını açın, F12'ye basın, Fetch/XHR filtreli Network sekmesine geçin.
  2. Yorumlar bloğuna kaydırın ve «Tüm yorumları gör» düğmesine basın.
  3. Adında feedbacks olan isteği bulun. Yanıtta metin, puan, tarih, artılar ve eksiler alanları, yazar adı, renk ve beden, fotoğraf işareti ve satıcı yanıtı olan bir liste olacak.
  4. Yanıttaki toplam yorum sayısına dikkat edin — bütünlüğü kontrol etmeye yardımcı olur.
  5. Adresi ve başlıkları kopyalayın, 4. adımdaki örneğe göre betiğe girin. Sayfalama burada olmayabilir — bazı yanıtlar tamamen gelir, bazen çok büyük bir dosya olarak. Zaman aşımını 60 saniyeye çıkarın.

Ozon

Ozon verileri aktif olarak korur ve istemci davranışını kontrol eder. Yorumlar için site, sayfa içeriği için dahili bir istek kullanır ve yorumlar bunun bloklarından biridir. Pratik işlem sırası:

  1. Ürün sayfasını açın, ardından karttaki bağlantıdan yorumlar bölümüne geçin.
  2. Geliştirici panelinde yanıtında content, score veya rating ve author alanlarını içeren bir dizi bulunan isteği bulun. Farklı adlandırılmış olabilir, panelin arama satırından içeriğe göre arayın (Network sekmesi içinde Ctrl+F kombinasyonu).
  3. İsteği cURL olarak kopyalayın. Başlıklara ve çerezlere dikkat edin: Ozon bunların yokluğuna duyarlıdır.
  4. Betikten yeniden üretirken requests.Session kullanın, böylece çerezler istekler arasında korunur ve ilk isteği normal ürün sayfasına, ancak sonra yorumlara yapın. Bu doğal kullanıcı yolunu taklit eder.
  5. Duraklamaları 4-6 saniyede tutun ve mobil proxy üzerinden IP'yi her 30-50 istekte bir değiştirin.

Dikkat: Platform tarayıcı kontrol sayfası veya captcha vermeye başladıysa bu durma, daha fazla bastırmama sinyalidir. Sıklığı azaltın, rotasyon bağlantısıyla IP'yi değiştirin ve 10-15 dakika bekleyin. Savunma mekanizmalarına sistematik baskı, tüm adres havuzunun engellenmesine yol açar ve platform kurallarına aykırıdır.

Yandex Market

Yandex Market'te yorumlar iki türlüdür: ürün hakkında (tüm satıcılar için ortak) ve mağaza hakkında. Ürün analizi için birincisi, hizmet analizi için ikincisi gerekir. Her iki türde de artılar, eksiler ve yorum ayrımı ile puan ve tarih vardır. Yorum isteği, ürün kartının «Yorumlar» sekmesinde geliştirici paneliyle aynı şekilde bulunur.

Şemaya dönüştürme

Pazaryerlerinde metin alanı genellikle üç bölümden oluşur. Bunları şöyle kaydedin: pros — pros sütununa, cons — cons sütununa, genel yorum — text'e. Analiz için tek bir birleşik metin gerekiyorsa temizleme aşamasında üç sütunu bir ayırıcıyla birleştirin, ancak ham verilerde ayrı saklayın.

İpucu: Pazaryerlerinde fotoğraflı ve onaylanmış satın almalı yorumlar belirgin şekilde daha bilgilendiricidir. Betiğe bir filtre ekleyin: önce her şeyi toplayın, analizde has_photo 1 olan dilimi ayrıca inceleyin. Çoğu zaman kusurların ve gerçek kullanım senaryolarının en ayrıntılı açıklamaları tam oradadır.

Beklenen sonuç: her pazaryeri için 3-5 ürünün yorumlarını içeren ve birleşik şemaya uygun birer CSV.

Olası sorunlar: toplanan yorum sayısı sayfadaki sayaçtan az. Nedeni: platform çıktı derinliğini sınırlar veya yalnızca metinli yorumları verir, yorumsuz puanları gizler. Çözüm: sayfadaki «toplam puan» ve «metinli» sayaçlarını karşılaştırın — genellikle fark tam da bununla açıklanır.

Kontrol: Dosyayı Excel'de açın, rating sütununa göre bir pivot tablo oluşturun. Puan dağılımı yaklaşık olarak ürün kartının gösterdiğiyle eşleşmelidir: platformda %70 beşli varsa sizin örnekleminizde de yakın bir değer olmalı.

Adım 6: Toplayıcılardan yorum toplama — Otzovik, iRecommend, Flamp, Zoon

Bu aşamanın amacı: yorumların arka planda JSON değil, HTML işaretlemeli bağımsız makaleler olduğu platformlarla çalışmayı öğrenmek.

Toplayıcıların farkı

Otzovik ve iRecommend sayfaları klasik şekilde oluşturur: her yorum başlıklı, uzun metinli, puan, tarih, artılar ve eksiler içeren ayrı bir sayfadır; nesne sayfasında bu yorumlara kısa önizlemeleriyle birlikte bağlantı listesi bulunur. Flamp ve Zoon haritalara daha yakındır: kuruluş, yorum listesi, parça parça yükleme. Buna göre, ilk ikisi için HTML ayrıştırma gerekir, ikincisi için 4. adımdaki yöntem uygundur.

HTML ayrıştırma kütüphanesini kurma

Terminalde pip install beautifulsoup4 lxml çalıştırın. BeautifulSoup kütüphanesi, geliştirici panelinde gözünüzle bulduğunuz gibi sayfa öğelerini etiket ve sınıflara göre bulmanızı sağlar.

Otzovik'ten adım adım toplama

  1. Otzovik'te nesne sayfasını (ürün, şirket, kurs) açın.
  2. F12'ye basın ve Elements (Öğeler) sekmesine geçin.
  3. Panelin sol üst köşesindeki ok simgesine basın ve listedeki ilk yorumun başlığına tıklayın. Panelde HTML öğesi vurgulanır. Etiketini ve sınıfını kaydedin — bu, yoruma bağlantının seçicisidir.
  4. Aynı şekilde puan öğelerini (genellikle yıldızlar ve sayısal özniteliği olan bir blok), tarihi ve kısa metni bulun.
  5. Sayfayı aşağı kaydırın ve sayfalama bloğunu bulun. 2 rakamına tıklayın ve adresin nasıl değiştiğine bakın — genellikle sayfa numarası eklenir. Bu, gezinme için şablondur.
  6. Betikte: liste sayfasını proxy ile requests üzerinden yükleyin, BeautifulSoup ile ayrıştırın, yorum bağlantılarını ve önizlemeleri çıkarın, ardından sonraki liste sayfasına geçin. Sayfalar arası duraklama 5-8 saniye, toplayıcılar haritalardan daha hassastır.
  7. Önizleme yerine tam yorum metni gerekiyorsa ikinci bir geçiş yapın: her bağlantı için yorum sayfasını yükleyin ve ana metni, artılar ve eksiler bloklarını, alt kriter puanlarını çıkarın.

iRecommend

Mantık Otzovik'e benzer: nesne sayfasında yorum listesi ve ayrı yorum sayfaları. Farkı işaretlemede ve puanın dolu yıldız sayısıyla ifade edilmesinde — sayı aramak yerine etkin sınıfa sahip yıldız öğelerini sayın.

Flamp ve Zoon

Bu platformlar için 4. adımdaki yöntemi kullanın: kuruluşu açın, Fetch/XHR'a geçin, yorumları kaydırın ve arka plan isteğini bulun. Flamp yorumları puan, metin, tarih, resmi yanıt ve faydalılık ile verir. Zoon — puan, metin, tarih ve kuruluş yanıtıyla. Her iki platform da bütünlük kontrolü için toplam yorum sayısını gösterir.

Küçük HTML ayrıştırma örneği

from bs4 import BeautifulSoup
html = requests.get(page_url, headers=headers, proxies=proxies, timeout=30).text
soup = BeautifulSoup(html, 'lxml')
for card in soup.select('div.review-card'):
    title_el = card.select_one('a.review-title')
    rating_el = card.select_one('div.rating')
    date_el = card.select_one('span.review-date')
    row = {'text': title_el.get_text(strip=True) if title_el else '', 'rating': rating_el.get('data-value') if rating_el else '', 'published_at': date_el.get_text(strip=True) if date_el else '', 'url': title_el.get('href') if title_el else ''}

Buradaki sınıf adları koşulludur — Elements panelinde gördüğünüz gerçek olanları girin. Boş öğe kontrolleri zorunludur: bir yorumun işaretlemesi farklıysa betik tamamen çökmemelidir.

İpucu: Toplayıcılarda tarihler sıklıkla kelimelerle yazılır: «dün», «3 gün önce», «14 Mart». Bu tür dizeleri toplama tarihine göre YYYY-AA-GG biçimine dönüştüren ayrı bir tarih normalizasyon fonksiyonu oluşturun. Bu olmadan zamana göre sıralama çalışmaz.

Beklenen sonuç: bir-iki toplayıcıdan yorum içeren CSV; her yorum için puan, tarih ve metin, Otzovik ve iRecommend için ayrıca tam sayfaya bağlantı.

Olası sorunlar: birkaç sayfadan sonra seçiciler öğeleri bulamıyor. Nedeni: platform liste yerine kontrol sayfası verdi. Çözüm: her yüklemeden sonra sayfa başlığını kontrol edin, kontrol belirtileri görülünce duraklayın, IP değiştirin, birkaç dakika sonra tekrarlayın.

Kontrol: Bir liste sayfasından toplanan yorum sayısı, tarayıcıda o sayfada gördüğünüz yorum sayısına eşit. Daha az toplandıysa seçicilerden biri fazla dardır.

Adım 7: Mobil proxy'leri bağlayın ve rotasyonu ayarlayın

Bu aşamanın amacı: yorum kazıyıcının onlarca ve yüzlerce nesnede istikrarlı çalışmasını, yükü dağıtmasını ve tek adresten anormal akış oluşturmamasını sağlamak.

Neden özellikle mobil proxy'ler

Bu rehberdeki tüm platformlar mobil kitleye yöneliktir: yorumların çoğu akıllı telefondan yazılır ve okunur. Operatörlerin mobil IP adresleri, arkasında aynı anda yüzlerce ve binlerce gerçek abonenin bulunduğu adreslerdir. Platformlar gerçek kullanıcılara zarar vermeden bu adresleri engelleyemez, bu nedenle onlara hoşgörülüdür. Yorum toplama için bu, daha az kontrol, daha az yanlış savunma tetiklemesi ve öngörülebilir hız anlamına gelir.

Bağlantı ayarı

  1. mobileproxy.space kişisel paneline giriş yapın ve proxy listenizi açın.
  2. Host, port, kullanıcı adı ve şifreyi kopyalayın. Protokole dikkat edin: requests için HTTP proxy daha uygundur, ancak SOCKS5 de pip install requests[socks] kurulumuyla desteklenir.
  3. Verileri betikteki PROXY değişkenine girin. Biçim: protokol, iki nokta, iki eğik çizgi, kullanıcı adı, iki nokta, şifre, et işareti, host, iki nokta, port.
  4. Panelden IP değiştirme bağlantısını kopyalayın ve ROTATE_URL değişkenine kaydedin.
  5. Proxy üzerinden IP'nizi gösteren herhangi bir servise test isteği çalıştırın. Yanıtta ev sağlayıcınızın değil, mobil operatörün adresi olmalı.

Rotasyon stratejisi

İki yaklaşım var ve ikisi de işe yarar.

  • Zamana göre rotasyon. Panelde otomatik IP değişim aralığı ayarlanır, örneğin her 5 dakikada. Betik hiçbir şey yapmaz — adres kendiliğinden değişir. Uzun sakin toplamalar için uygundur.
  • Olaya göre rotasyon. Betik ROTATE_URL'yi gereken anda kendisi çağırır: her N istekten sonra, yeni nesneye geçerken veya 429/403 kodu alındığında. Kontrol gerektiğinde uygundur.

Yorumlar için pratik kural: her yeni nesneye geçişte ve ek olarak bir nesne içinde 40-60 istekten sonra IP'yi değiştirin. IP değişiminden sonra 5-10 saniye duraklayın — operatörün yeni adresin etkin olması için zamana ihtiyacı vardır.

Hata işleme ve tekrarlar

fetch_page fonksiyonuna bir sarmalayıcı ekleyin: 429, 403, 5xx kodlarında veya zaman aşımında — rotasyonu çağırın, bekleyin, isteği artan duraklamayla (10, 30, 90 saniye) en fazla üç kez tekrarlayın. Üç deneme yardımcı olmazsa — nesneyi failed.txt dosyasına yazın ve bir sonrakine geçin. Böylece sorunlu bir nesne tüm toplamayı durdurmaz ve eksikleri sonra ayrıca çekersiniz.

def fetch_with_retry(url, attempts=3):
    delay = 10
    for i in range(attempts):
        try:
            r = requests.get(url, headers=headers, proxies=proxies, timeout=30)
            if r.status_code == 200:
                return r.json()
        except requests.RequestException:
            pass
        requests.get(ROTATE_URL, timeout=15)
        time.sleep(delay)
        delay *= 3
    return None

Kaç iş parçacığı kullanmalı

Yeni başlayanlar için — tek iş parçacığı. Bir proxy, bir bağlantı, sıralı gezinme. Yavaş ama güvenilir: saatte 500-1000 yorum, tek bir sorun olmadan. Her şeyin istikrarlı olduğundan emin olduktan sonra ikinci bir proxy ekleyip betiğin ikinci bir örneğini nesne listesinin diğer yarısında çalıştırabilirsiniz. Yorumlar için platform başına 3-4 iş parçacığından fazlası neredeyse hiç gerekmez.

İpucu: User-Agent'ı IP türüyle uyumlu hale getirin. Mobil proxy üzerinden gidiyorsanız, 4. adımdaki örnekte olduğu gibi mobil tarayıcı olarak sunun. «Mobil IP ama Windows'ta masaüstü Chrome» uyumsuzluğu tek başına kritik değildir, ancak uyumluluk ek kontrollerin sayısını azaltır.

Beklenen sonuç: bir platform için tüm sources.csv'yi elle müdahale olmadan geçen, nesneler arasında IP değiştiren ve sorunlu nesneleri failed.txt'ye yazan bir betik.

Olası sorunlar: IP değişiminden sonra ilk istekler zaman aşımıyla düşüyor. Çözüm: rotasyondan sonra duraklamayı 15 saniyeye çıkarın. Proxy hiç bağlanmıyor — panelde beyaz liste IP'nin etkin olup olmadığını kontrol edin ve bilgisayarınızın adresini ekleyin.

Kontrol: Arka arkaya 10 nesne için toplamayı çalıştırın. Günlükte nesneler arasında IP değişim kayıtları olmalı, failed.txt boş olmalı veya en fazla bir nesne içermeli ve sonuçtaki toplam satır sayısı platformdaki yorum sayaçlarının toplamıyla karşılaştırılabilir olmalı.

Adım 8: Kaydetme, temizleme ve tekilleştirme

Bu aşamanın amacı: farklı platformlardan gelen ham CSV kümelerini analize uygun tek bir temiz tabloya dönüştürmek.

Dosyaları birleştirme

  1. Tüm ham dosyaların raw klasöründe olduğundan ve schema.txt'ye göre aynı başlıklara sahip olduğundan emin olun.
  2. merge.py dosyasını oluşturun. pandas ile raw klasöründeki tüm CSV'leri tek bir DataFrame'e okuyun: pandas.concat fonksiyonu tablo listesini birleştirir.
  3. Tipleri kontrol edin: rating sayı, published_at tarih olmalı. pandas.to_numeric ve pandas.to_datetime ile errors='coerce' parametresiyle dönüştürün, böylece geçersiz değerler işlemi bozmak yerine boş olur.

Tekilleştirme

Tekrarlar üç nedenden ortaya çıkar: sayfalama sırasında sayfaların çakışması, tekrarlanan çalıştırmalar ve aynı yorumun yazar tarafından birkaç platformda yayınlanması. Sırayla işleyin:

  1. source ve review_id çiftine göre tam kopyaları kaldırın — bunlar sayfalama ve yeniden başlatmalardan kaynaklanan tekrarlardır. subset parametresiyle drop_duplicates metodu.
  2. Bir platform içinde bulanık kopyaları bulun: aynı object_id, aynı tarih ve metnin ilk 100 karakteri. Bu, platform yorum düzenlendiğinde kimliği değiştirdiğinde olur.
  3. Platformlar arası kopyaları silmeyin, ayrı bir sütunla işaretleyin. Bir kişinin aynı şeyi Otzovik'te ve Yandex Haritalar'da yazması başlı başına bilgilendiricidir.

Metin temizleme

  • Metin içindeki çift boşlukları ve satır sonlarını kaldırın.
  • Metne giren platform hizmet ifadelerini silin: «Tamamını oku», «Daha fazla göster».
  • pros ve cons içindeki boş dizeleri «yok» veya «-» dizesi yerine açık boş değerle değiştirin.
  • Kodlamayı kontrol edin: anlamsız karakterler görüyorsanız dosya utf-8 olarak kaydedilmemiştir. Ham kaynaktan yeniden kaydedin.

Sonucu dışa aktarma

Son tabloyu clean klasörüne reviews_all_YYYY-AA-GG.xlsx adıyla to_excel metoduyla ve paralel olarak CSV olarak kaydedin. Excel görüntülemek için kullanışlıdır, CSV diğer sistemlere yüklemek için. Ek olarak bir özet dosyası kaydedin: platformlara göre yorum sayısı, nesnelere göre ortalama puan, şirket yanıtı olan yorumların oranı.

İpucu: Temiz tabloya text_len sütununu, metin uzunluğunu ekleyin. 30 karakterden kısa yorumlar nedenleri analiz etmek için neredeyse her zaman işe yaramaz, ancak puanı 2-3 olan uzun yorumlar altındır: içlerinde insanlar tam olarak neyin yanlış olduğunu ayrıntılı olarak açıklar.

Beklenen sonuç: tüm platformlardan yorumları içeren, tam kopyaları olmayan, doğru veri tiplerine ve özete sahip tek bir temiz dosya.

Olası sorunlar: tekilleştirmeden sonra çok fazla satır kayboldu. Nedeni: bir platformda review_id tüm kayıtlar için boş çıktı ve hepsi kopya sayıldı. Çözüm: platformlara göre review_id doluluğunu kontrol edin ve sorunlu platform için kimliği object_id, tarih ve metin hash'inden oluşturun.

Kontrol: Temiz dosyadaki satır sayısı, ham dosyaların satır toplamından en fazla %5-10 az. rating sütununda 1-5 aralığı dışında değer yok, published_at sütununda gelecekten tarih yok.

Sonucu kontrol etme: kontrol listesi ve test

Toplanan yorumlardan sonuç çıkarmadan önce toplamanın doğru yapıldığından emin olun. Kontrol listesini tamamen geçin.

Hazır olma kontrol listesi

  • sources.csv'deki her nesne için temiz tabloda en az bir yorum var veya nesne nedenle birlikte failed.txt'ye yazılmış.
  • Her nesne için yorum sayısı platformdaki sayaçtan en fazla %10 farklı.
  • Nesneye göre puan dağılımı yaklaşık olarak platformun gösterdiği dağılımla örtüşüyor.
  • Tablodaki en yeni yorum, nesne aktifse toplama tarihine göre dünden daha eski değil.
  • Tüm tarihler YYYY-AA-GG biçiminde, tüm puanlar sayı.
  • source ve review_id'ye göre tam kopya yok.
  • Yazar adları ya yok ya da görev ad gerektirmiyorsa hash ile değiştirilmiş.
  • Ham veri dosyaları tarihle kaydedilmiş ve üzerine yazılmamış.
  • Token'lar ve proxy verileri betiğin içinde değil, ayrı bir yapılandırma dosyasında.

Seçici test nasıl yapılır

  1. pandas'ta sample fonksiyonuyla tablodan rastgele 10 yorum seçin.
  2. Her biri için platformdaki nesne sayfasını açın ve yorumu metin parçasıyla bulun.
  3. Puanı, tarihi ve şirket yanıtı olup olmadığını karşılaştırın.
  4. 10'da 10 eşleştiyse — mükemmel. 8-9 ise — farkların toplama sonrası yorum düzenlemesiyle ilgili olup olmadığını kontrol edin. 8'den azsa — ayrıştırmada sistematik hata var, ilgili adıma dönün.

Başarılı yürütme göstergeleri

Başarı şöyle görünür: tek bir tabloyu açıp herhangi bir platform ve nesneye göre filtreleyebilir, tarihe ve puana göre sıralayabilir ve 1. adımdaki asıl soruyu beş dakikada yanıtlayabilirsiniz. Örneğin, son üç ayda Yandex Haritalar'da kahve dükkânı hakkında 1-2 puanlı yorumların %40'ının bekleme süresinden bahsettiğini, 2GIS'te aynı kişilerin kahveyi övdüğünü ama personelden şikayet ettiğini görmek. Soru yanıt buluyorsa — toplama görevini yerine getirmiştir.

Sık yapılan hatalar ve çözümleri

Aşağıda ilk kez yorum kazıyıcı kuran neredeyse herkesin karşılaştığı sorunlar toplanmıştır. Biçim: sorun, neden, çözüm.

1. Betik yalnızca ilk 20 yorumu topladı

Neden: sayfalama uygulanmamış veya kaydırma parametresi yanlış belirlenmiş.

Çözüm: geliştirici paneline dönün, yorum listesini iki kez kaydırın ve iki ardışık isteğin adreslerini karşılaştırın. Değişen parametre kaydırma veya sayfa numarasıdır. Betiğin bunu doğru adımla artırdığından emin olun.

2. Tüm yorumlar aynı tarihle geliyor — toplama tarihiyle

Neden: published_at alanına collected_at yazılıyor veya platform tarihi farklı adlı bir alanda veriyor.

Çözüm: Bir yorumun raw_json'unu açın ve yayın tarihi alanını bulun. date, created, published, time, updatedAt olarak adlandırılmış olabilir. Betikteki alan adını düzeltin.

3. Excel'de Rusça metin yanlış görünüyor

Neden: CSV, bayt sırası işareti olmadan utf-8 olarak kaydedilmiş, Excel farklı kodlamayla açıyor.

Çözüm: utf-8-sig kodlamasıyla kaydedin veya doğrudan to_excel ile xlsx olarak dışa aktarın.

4. Platform her isteğe 403 koduyla yanıt veriyor

Neden: zorunlu başlıklar gönderilmemiş, oturum çerezleri ayarlanmamış veya istek çok sık gidiyor.

Çözüm: Referans cURL komutuyla karşılaştırın. requests.Session kullanın ve önce normal nesne sayfasını yükleyin. Duraklamaları 5 saniyeye çıkarın. Proxy üzerinden IP değiştirin ve tekrarlamadan önce 10 dakika bekleyin.

5. Toplanan puanlar gerçeklerle örtüşmüyor

Neden: platform puanı farklı ölçekte saklıyor (örneğin 0-100 veya 1-10) ya da ayrı bir alanda genel puan değil alt kriter puanı saklıyor.

Çözüm: Üç yorumu elle karşılaştırın. Ölçeği belirleyin ve yuvarlamayla bölerek beşli ölçeğe dönüştürün. Bunu schema.txt'de belgeleyin.

6. Her çalıştırmada yorum sayısı farklı

Neden: Sıralama sabitlenmemiş ve platform «ilgi düzeyine göre» modunda farklı kümeler veriyor.

Çözüm: İstek adresindeki sıralama parametresini bulun ve tarihe göre sıralamayı kesin olarak ayarlayın. Gereken dönemden eski bir yorumla karşılaşana kadar toplayın.

7. Betik bir nesnede çöküyor ve devam etmiyor

Neden: istisna işleme yok, herhangi bir hata programı durduruyor.

Çözüm: Her nesnenin işlenmesini try-except içine alın, hatayı ve nesne kimliğini failed.txt'ye yazın ve bir sonrakine geçin. Eksikleri ayrı bir çalıştırmayla tamamlayın.

8. Bir hafta çalıştıktan sonra betik aniden hiçbir şey bulamıyor

Neden: platform istek adresini, JSON yapısını veya HTML'deki sınıf adlarını değiştirdi.

Çözüm: bu her kazıyıcının yaşamının normal bir parçasıdır. 4. adımdaki istek bulma prosedürünü tekrarlayın ve adresi ve alan adlarını güncelleyin. Seçici ve alan listesini ayrı bir yapılandırma dosyasında tutun, böylece tüm kodu değil tek bir yeri düzeltirsiniz.

9. Proxy çalışıyor ama hız çok düşük

Neden: çok büyük yanıtlar (pazaryerleri bazen binlerce yorumu tek dosyada verir) veya yoğun saatte operatörün baz istasyonundaki yük.

Çözüm: zaman aşımını artırın, Accept-Encoding başlığıyla sıkıştırmayı etkinleştirin, hacimli toplamaları gece saatlerine planlayın.

İleri düzey kullanıcılar için ek olanaklar

Temel senaryoda ustalaştıysanız, işte büyüyebileceğiniz alanlar. Bu bölüm Python'u güvenle yazdığınızı varsayar.

Artımlı toplama

Tam yeniden toplama yerine her nesne için toplanan en yeni yorumun tarihini saklayın. Sonraki çalıştırmada tarihe göre sıralamayla toplayın ve saklanan tarihten yeni olmayan bir yorumla karşılaşır karşılaşmaz durun. Böylece 500 nesne için günlük güncelleme saatler yerine dakikalar sürer ve platformlardaki yük on kat azalır. Yorumların moderasyondan sonra geçmişe dönük görünebileceğini unutmayın — 2-3 günlük bir örtüşme yapın.

Karmaşık platformlar için tarayıcı otomasyonu

Google Maps ve Ozon'un bazı bölümlerini yönetilen bir tarayıcıyla toplamak daha kolaydır: mobil proxy bağlı Playwright sayfayı açar, yorum listesini kaydırır ve response olay işleyicisi aracılığıyla arka plan yanıtlarını yakalar. Geliştirici panelindeki aynı JSON'u elde edersiniz, ancak başlıkları ve çerezleri elle yeniden üretmeye gerek kalmaz. Playwright mobil cihaz emülasyonunu destekler, bu da mobil IP ile mükemmel uyum sağlar. Bedeli hız ve bellek tüketimidir: bir tarayıcı 300-500 MB yer, bu nedenle en fazla 2-3 örnek çalıştırın.

Veritabanında saklama

Yorumlar 100 binin üzerine çıktığında CSV kullanışsız olur. SQLite'a (Python'a dahildir, diskte dosya, sıfır yapılandırma) veya PostgreSQL'e geçin. source ve review_id çifti üzerinde benzersiz indeksli reviews tablosu otomatik olarak kopyalara karşı korur: ON CONFLICT DO NOTHING işlemiyle INSERT, tekrarları veritabanı düzeyinde reddeder.

Zenginleştirme ve analiz

  • Duygu ve konular. Metinleri «3 ana konu ve genel duygu belirle» gibi bir istemle bir dil modelinden geçirin. Sonucu ayrı sütunlara koyun. On binlerce yorum için toplu işleme ve önbellek kullanın, aynı metin için iki kez ödemeyin.
  • Puan dinamikleri. Her nesne için haftalara göre ortalama puanı oluşturun. Keskin düşüş, yorumların kelimelerle açıklayacağı bir sorunun işaretidir.
  • Şirket tepki hızı. published_at ile şirket yanıtı tarihi arasındaki fark, kendi ve rakiplerin destek kalitesinin doğrudan göstergesidir.
  • Reklam için sorun sözlüğü. 1-2 puanlı yorumlarda isim ve sıfatların sıklık analizi, reklam metinleri ve açılış sayfaları için hazır bir ifade listesi verir.

Kazıyıcı sağlığını izleme

Windows Görev Zamanlayıcısı veya cron ile günlük çalıştırma ayarlayın ve basit bir kontrol ekleyin: günde toplanan, haftalık ortalamanın %30'undan azsa veya hata oranı %10'u aştıysa — bir bot aracılığıyla Telegram'a bildirim gönderin. Böylece platformdaki işaretleme değişikliğini aylar sonra veriye ihtiyaç duyduğunuzda değil, aynı gün öğrenirsiniz.

Proxy havuzu yönetimi

Aynı anda birkaç platformla çalışırken her birine ayrı bir mobil proxy atayın. Böylece bir platformdaki davranış diğerindeki adres itibarını etkilemez. Haritalar için rotasyonu daha seyrek yapın (nesneler genellikle küçüktür, 50-200 yorum), pazaryerleri için daha sık (kart başına binlerce yorum). Bir günlük tutun: zaman, platform, IP, yanıt kodu. Bir hafta sonra bu günlükten yük profiliniz için hangi rotasyon aralıklarının optimal olduğu görülecektir.

SSS: yorum toplama hakkında sık sorulan sorular

Genel sayfalardan yorum toplamak yasal mı?

Herkese açık bilgileri kendi analiziniz için toplamak tek başına yasak değildir, ancak sınırlamalar vardır: platformların kullanıcı sözleşmeleri, kişisel verilerin işlenmesine ilişkin 152-FZ gereklilikleri, hizmetin çalışmasına engel olma yasağı. Duraklamalara uyun, yazarları anonimleştirin, toplanan veritabanlarını yayınlamayın ve mümkün olan her yerde resmi API'leri kullanın. Verilerin ticari kullanımında bir avukata danışın.

Programlama olmadan yapılabilir mi?

Kısmen. Kendi nesneleriniz için kişisel paneller yeterlidir. Küçük tek seferlik görevler için sayfada görünen öğeleri tabloya aktaran tarayıcı uzantısı kazıyıcılar uygundur: yorumları elle kaydırırsınız, uzantı toplar. Onlarca nesne için düzenli toplama için betik yine de daha kullanışlı ve güvenilirdir, bu rehberdeki hazır parçalar neredeyse hiç değişiklik yapmadan kullanılabilir.

Sadece 10 nesnem varsa mobil proxy neden gerekli?

10 nesne ve tek seferlik toplama için onlarsız da deneyebilirsiniz. Ancak verileri düzenli güncellemeye başlar veya listeyi genişletirseniz, tek bir ev IP'sinden gelen istekler ek kontroller almaya başlar. Mobil proxy bunu önceden çözer ve maliyeti, engellemeleri çözmek için harcanan zamanla kıyaslanamaz.

Saatte gerçekte kaç yorum toplanabilir?

2-5 saniye duraklamalarla tek iş parçacığında — platformdaki parça boyutuna bağlı olarak saatte 500 ila 1500 yorum. Yüzlerce yorumu tek yanıtta veren pazaryerleri daha fazla verir, sayfa sayfa HTML sunan toplayıcılar daha az. Çoğu analitik görev için bu fazlasıyla yeterlidir.

Her şeyi yeniden değil, yalnızca yeni yorumları nasıl toplarım?

Her nesne için son toplanan yorumun tarihini saklayın, istekte tarihe göre sıralayın ve bilinen ilk yorumda durun. Ayrıntılar için artımlı toplama bölümüne bakın.

Metinsiz, yalnızca puanlı yorumlar — toplanmalı mı?

Göreve bağlı. Ortalama puan ve dinamik hesaplamak için — evet, sayıları etkiler. Nedenleri analiz etmek için — hayır, işleme sırasında filtrelenebilir. Her şeyi toplayın, analiz aşamasında filtreleyin: yeniden toplamak daha pahalıdır.

Platform captcha gösteriyorsa ne yapmalı?

Toplamayı 10-15 dakika durdurun, proxy üzerinden IP değiştirin, istek sıklığını azaltın ve başlıkları kontrol edin. Captcha, davranışınızın alışılmadık göründüğünün sinyalidir. Görev onu tipik hale getirmek, kontrolden geçmeye zorlamak değildir.

Yasayı ihlal etmemek için yazar adları nasıl saklanmalı?

En iyisi hiç saklamamak. Aynı yazarın yorumlarını ayırt etmek gerekiyorsa addan tek yönlü hash kullanın. Adlar gerekliyse (örneğin kişisel panel üzerinden müşteriye yanıt vermek için), bunları yalnızca kendi kuruluşunuzla çalışma kapsamında saklayın ve üçüncü taraflara aktarmayın.

Yorum kazıyıcılar ne sıklıkla bozulur?

Büyük platformlar iç istekleri ve işaretlemeyi yılda birkaç kez değiştirir. İyi bir izlemeyle onarım 20-40 dakika sürer: istek aramasını tekrarlayın ve alanları güncelleyin. Seçicileri ve adresleri bir yapılandırma dosyasında tutun, düzeltmeler noktasal olur.

Tüm platformlardan tek betikle toplanabilir mi?

Evet, ortak bir iskelet (proxy, tekrarlar, şemaya yazma) ve her platform için istek adresini ve alan adlarını bilen ayrı bir adaptör fonksiyonu yaparsanız. Olgun projeler tam olarak böyle çalışır: bir ortak modül ve on kadar küçük adaptör.

Sonuç

Özetleyelim. Soruyu formüle etmekten üç farklı platform türünden gelen temiz bir yorum tablosuna kadar tüm yolu geçtiniz. Geliştirici paneli aracılığıyla arka plan isteklerini bulmayı, bunları betikle yeniden üretmeyi, JSON'un olmadığı yerlerde HTML ayrıştırmayı, rotasyonlu mobil proxy bağlamayı, hataları işlemeyi ve istekleri tekrarlamayı, verileri birleştirmeyi ve temizlemeyi öğrendiniz. Ayrıca resmi dışa aktarma yollarını ve yasal çerçeveyi ele aldınız, bu da hem verileri hem de sizi korur.

Akılda tutulması gereken en önemli şey: yorumlar kendine özgü dinamikleri olan özel bir veri türüdür. Sürekli ortaya çıkar, düzenlenir, moderasyondan geçer ve kişisel bilgi taşır. Bu nedenle bir yorum kazıyıcı tek seferlik bir betik değil, küçük bir sistemdir: toplama, ham veri saklama, şemaya dönüştürme, tekilleştirme, izleme. Bu sistemin her öğesini zaten temel biçimde kurdunuz.

Bundan sonra ne yapmalı:

  1. sources.csv'yi gerçek nesne listesine genişletin ve tam toplama yapın.
  2. Görev Zamanlayıcısı ile günlük artımlı çalıştırma ayarlayın.
  3. En az bir analitik katman ekleyin: puan dinamikleri veya olumsuz yorumların temalaştırılması.
  4. Platform değişiklikleri için bir günlük tutun ve bozuldukça adaptörleri güncelleyin.

Nereye gelişmeli. Bir sonraki seviye tepki otomasyonudur: yayından sonraki bir saat içinde ekibe olumsuz yorum bildirimi, haftada bir rakipler için karşılaştırmalı raporlar, yorumlardan çıkan temaların ürün planına ve reklam hipotezlerine entegrasyonu. Veriler artık elinizde. Geriye onları karara dönüştürmek kalıyor ve işin en ilginç kısmı tam da burada başlıyor.