Scraper Botlar Hk.

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Böcüklerin Efendisi
    krypt
    krypt's avatar
    Kayıt Tarihi: 05/Mart/2004
    Erkek

    Hocalar daha önce hiç bot yazmamıştım, lakin bir sebepten dolayı yazmam gerekti. Şimdi programın iskeleti tamam. HTTP requestler, dom parsing ıvır zıvır hazır. Ancak veriyi çekme stratejisi konusunda kararsız kaldım. Veri  kategoriler altında pagination ile listeleniyor. Veri de atıyorum /veri.php?id=x URI'sinde bulunuyor. Önce tek tek kategori altındaki sayfaları gezip ürün idlerini çektikten sonra, veri sayfasından ürünleri mi çekmek mantıklı. Yoksa, /veri.php?id=x'te x'i sıfırdan başlatıp muhtemel her id değeri için bir request gönderip veri var mı yok mu diye kontrol etmek mi mantıklı. Şimdi veri id'leri baya karışık 3000-4000 arası görünüyor ama istisna var mı bilemiyorum. Tek tek her id için request yollamak daha yavaş olur ve ban yeme riskini arttırır gibi geliyor. Diğer türlü crawling de meşakkatli olacak. Normalde botlarda hangi teknik kullanılıyor?


    while (1<2)
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nickalti
    Lightsaber
    Lightsaber's avatar
    Kayıt Tarihi: 29/Ağustos/2012
    Erkek

    benzer bi botta önce kategorilerin bulunduğu sayfadan kategorileri çekip sonra o sayfalardan ürünleri çekmiştim.

    idler her zaman düzenli gitmiyor, yayından kaldırılmış bir ürünse mesela bazı sayfaları boşuna ziyaret edersin.


    İnsan; insan olsaydı,insan olmazdı..
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    hangisi kolayına gidiyorsa, iki türlü de yapabilirsin

    en azından max id'yi biliyorsan ve site HEAD destekliyorsa hız kazandırır

    önce HEAD çekersin, öyle bir sayfa yoksa zaten 404 döner, var ise GET ile çekersin

    hangi dili kullandığını bilmediğimizden anca bu kadar tavsiye verebiliyorum

    streaming request destekleyen bir fonksiyon var ise elinde

    önce get çekersin (body'yi çekmez) 20x dönerse veri vardır body'yi çekip işlersin

    büyük ölçekli bi site değilse nasıl yaptığın pek bir şeyi değiştirmeyecek

     

    bunlara ek olarak kullandığın dilde reusing same connection diye aratırsan, ilk isteği yaptığı socket'i kapatmadan

    diğer urlleri de aynı socketten istersin, bu sana tek thread'de bile baya hız kazandırır

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Böcüklerin Efendisi
    krypt
    krypt's avatar
    Kayıt Tarihi: 05/Mart/2004
    Erkek

    Eyv hocam sağolasın. Libcurl kullanıyorum php. Bildiğim kadarıyla cURL aynı servera yapılan requestlerde aynı connectionu kullanıyor zaten, öyle değil mi?

    Acaba python-scrapy ikilisine mi donsem diye de dusunmuyor değilim. 

     

     

    krypt tarafından 09/Haz/16 09:30 tarihinde düzenlenmiştir

    while (1<2)
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    scrapy kullanacaksan sunucuyu iyi gözlemlemek ve scripti iyi ayarlamak gerekir

    twisted kullandığından ve default ayarlarla (16 connection pool) hayvan gibi sömürür siteyi

    illa scrapy kullanacaksan dikkat çekmeden, sunucunun anasını ağlatmadan çekmek için önereceklerim

    http://doc.scrapy.org/en/latest/topics/settings.html

    CONCURRENT_REQUESTS = 1 veya 3

    - ram'i sömürmesine engel olmak ve kaldığın yerden devam edebilmek için JOBDIR klasörü belirlenmeli

    - verileri daha sonra kolay işleyebilmek adına çıktı formatı olarak ONELINE JSON (-t jl parametresi)

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Böcüklerin Efendisi
    krypt
    krypt's avatar
    Kayıt Tarihi: 05/Mart/2004
    Erkek

    Bu konuyu da hallettim. Scrapy işine girmedim hiç. requests ve lxml ile hallettim. Concurrent request işine giremedim. Multithreading de denedim, gevent de denedim, grequests de denedim hiç birisi single process'ten daha iyi performans vermedi. Sanırım hedef site ile ilgili bir durum. Nitekim site Apache Benchmark'ta berbat sonuç veriyor.

     

    krypt tarafından 11/Tem/16 10:55 tarihinde düzenlenmiştir

    while (1<2)
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek
    KrypT bunu yazdı

    Eyv hocam sağolasın. Libcurl kullanıyorum php. Bildiğim kadarıyla cURL aynı servera yapılan requestlerde aynı connectionu kullanıyor zaten, öyle değil mi?

    Acaba python-scrapy ikilisine mi donsem diye de dusunmuyor değilim. 

    Scrapy candir.


    vatandaşa kafam girsin!..
Toplam Hit: 1246 Toplam Mesaj: 7
bot scraper