folder Tahribat.com Forumları
linefolder Python
linefolder Scrapy - Açık Kaynak Örümcek



Scrapy - Açık Kaynak Örümcek

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek

    Python ile yazılmış bir framework.
    http://scrapy.org/
    Merak ettiğim daha öncesinde projesinde kullanmış olan var mı?

    Bunu ya da apache nutch'u projemde (sitelerdeki belirli verileri toplama) kullanacağım ama hangisinin daha verimli olacağı konusunda kararsızım. Yabancı forumlarda genelde nutch övülmüş ama kullanımının zor olduğu yazıyor. Ek olarak nutch  java ile yazılmış. Oldum olası java'ya ısınamadım (belki de beceremediğim içindir :) ). O yüzden python ile yazılmış scrapy'e daha sıcak yaklaşıyorum.

    Öneri, tavsiye, herbir şeye açığım...


    vatandaşa kafam girsin!..
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    All hail to Tux
    sandman
    sandman's avatar
    Kayıt Tarihi: 01/Eylül/2005
    Erkek

    Ben kullandım baya basit bir araç.

    Biz belli sitelerden veri toplayıp işlemek için kullanmıştım gidiyor tüm siteyi topluyor indexliyor sonrada biz işlemeye başlıyorduk.Biraz yavaş ve veritabanına kaydetme konusunda biraz sıkıntılıydı ama şu anki durumunu bilmiyorum.

    En büyük artısı arama sonuclarını xml olarak verebiliyor


    Mühendis kahveyi projeye dönüştüren bir insan evladıdır.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iLLuMiNaTi
    iLLuMiNaTi's avatar
    Kayıt Tarihi: 08/Mart/2007
    Erkek

    o değilde sphider i kullanayım dedim 2 site indexledim 1.5 cgb veri tabanı oldu yuh amk :D

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek
    sandman bunu yazdı

    Ben kullandım baya basit bir araç.

    Biz belli sitelerden veri toplayıp işlemek için kullanmıştım gidiyor tüm siteyi topluyor indexliyor sonrada biz işlemeye başlıyorduk.Biraz yavaş ve veritabanına kaydetme konusunda biraz sıkıntılıydı ama şu anki durumunu bilmiyorum.

    En büyük artısı arama sonuclarını xml olarak verebiliyor

    Teşekkür ederim, ayıklamayı yaptıktan sonra verileri xml olarak vermesi yeterli. Çok fazla site olmayacak zaten.
    Biraz kurcalayayım, gün sonunda becerebilirsem bir örnek yüklerim. :)

    ErotikPanda bunu yazdı

    o değilde sphider i kullanayım dedim 2 site indexledim 1.5 cgb veri tabanı oldu yuh amk :D

     derinliği ayarlamazsan, tüm linkleri takip ettirirsen olacağı buydu. :)


    vatandaşa kafam girsin!..
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek

    xPath'e biraz(!) çalışmam gerek anlaşılan. Türkçe bulabildiğim dişe dokunur tek kaynak:
    http://www.halitalptekin.com/tag/scrapy.html


    Sadece tahribat aktif konuları listeleyen böcük için:

    from scrapy.spider import BaseSpider
    from scrapy.selector import HtmlXPathSelector
    from tbt.items import TbtItem
    
    class MySpider(BaseSpider):
    	name = "tbt"
    	allowed_domains = ["tahribat.com"]
    	start_urls = ["http://tahribat.com/Aktif-Forum-Konulari/"]
    
    	def parse(self, response):
    		hxs = HtmlXPathSelector(response)
    		titles = hxs.select('//td[contains(@onmouseover, "this.className=\'Tip2 Aktif\'")]')
    		items = []
    		for titles in titles:
    			item = TbtItem()
    			item ["title"] = titles.select("a[1]/text()").extract()
    			items.append(item)
    		return items	

     

    Her seferinde kodu çalıştırıp çıktıya bakmaktansa

    scrapy shell http://tahribat.com/Aktif-Forum-Konulari/


    ardından doğru yolu bulabilmek için burada denemeleri yapabilirsiniz. Üsttekiyle aynı işi yapan kod:

    hxs.select('//td[contains(@onmouseover, "this.className=\'Tip2 Aktif\'")]/a[1]/text()').extract()

     

    örnek çıktı:

    -----------------------
    title
    ,Ankara‘da Cisco CCNP Eğitimi Almak İsteyenler.
    ,Ses Kalınlaştırılabilir Mi ?
    ,Müslüm Gürses‘ten Ümit Kesildi.
    ,Lozan Antlaşmasının Gizli Maddeleri
    ,Hamachi Ile Dota Nasıl Oynanır ?
    ,VirtualBox Sanal İşletim Sistemlerinin Birbirini Görmesi
    ,Rus Gencine Yıllardır Bakan Türk Kadını
    ,Çin Kargo Takip Sitesi
    ,DriverScanner Serial Key ?
    .......
    ----------------------

    Çıktıları istediğiniz formatta almak için 2 örnek:
    scrapy crawl tbt -o cikti.csv -t csv
    scrapy crawl tbt -o cikti.xml -t xml

    Son olarak http://stackoverflow.com scrapy için eşsiz bir nimet.

    Kolay gelsin.


    vatandaşa kafam girsin!..
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    YekteranBaymedir
    YekteranBaymedir's avatar
    Kayıt Tarihi: 10/Temmuz/2009
    Homo

    belki yeri değil ama ben de bir şey sorayım, bir sitenin bir sayfasını tam olarak kopyalayan bir yazılım var mı?

    örneğin youtube sayfası veriyorsun, video dosyası da dahil indiriyor?

  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Ayro
    Ayro's avatar
    Kayıt Tarihi: 08/Ağustos/2005
    Erkek
    sandman bunu yazdı

    Ben kullandım baya basit bir araç.

    Biz belli sitelerden veri toplayıp işlemek için kullanmıştım gidiyor tüm siteyi topluyor indexliyor sonrada biz işlemeye başlıyorduk.Biraz yavaş ve veritabanına kaydetme konusunda biraz sıkıntılıydı ama şu anki durumunu bilmiyorum.

    En büyük artısı arama sonuclarını xml olarak verebiliyor

    Senin bana seneler önce önerdiğin vardı buydu galba. İndirip incelemiştim. Canım çıkmıştıda , ona rağmen kodları tam çözememiştim.

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek
    Daft bunu yazdı

    belki yeri değil ama ben de bir şey sorayım, bir sitenin bir sayfasını tam olarak kopyalayan bir yazılım var mı?

    örneğin youtube sayfası veriyorsun, video dosyası da dahil indiriyor?

    indirme işi için wget kullanılabilir. Youtube taki gibi videoları indirmek istiyorsan farklı parametreleri kullanabilirsin.

    Ama bazı siteler içeriklerini gizli yapar; ücretli video sitesidir (ztv, vitaminegitim gibi). Bunlarda videoları indirmek için farklı yöntemler kullanırsın. URL sniff yapabilirsin, stream downloader vs. kullanabilirsin.

    Kısacası indirmek istediğin içeriğe göre yöntem değişir.


    vatandaşa kafam girsin!..
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    iLLuMiNaTi
    iLLuMiNaTi's avatar
    Kayıt Tarihi: 08/Mart/2007
    Erkek
    telekom bunu yazdı
     
    ErotikPanda bunu yazdı

    o değilde sphider i kullanayım dedim 2 site indexledim 1.5 cgb veri tabanı oldu yuh amk :D

     derinliği ayarlamazsan, tüm linkleri takip ettirirsen olacağı buydu. :)

    Hacı bu işin derinliğimi olur tabi herşeyi indexleyecek. Yoksa ne anlamı kalıyo :)

  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    telekom
    telekom's avatar
    Kayıt Tarihi: 28/Temmuz/2005
    Erkek

    2 günlük tatil iyi geldi, bu seferki biraz daha ayrıntılı bir örümcek. :)
    Ne yapıyor:
    Aktif konulara girdikten sonra her konuya teker teker bakıyor. Bu arada geldiği url'yi, konu başlığını ve konunun ilk mesajını kayıt ediyor.

    items.py içeriği:

    from scrapy.item import Item, Field
    
    class Tbt2Item(Item):
        url       = Field()
        konu       = Field()
        ilkmesaj       = Field()

    Örümceğin (tbt.py) içeriği:

    from scrapy.contrib.spiders import CrawlSpider, Rule
    from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
    from scrapy.selector import HtmlXPathSelector
    from tbt2.items import Tbt2Item
    
    
    class TbtSpider(CrawlSpider):
    # örümceğin ismi tbt2
        name = 'tbt2'
    # Nereden başlangıç yapacağımızı yazalım.
        start_urls = ['http://tahribat.com/Aktif-Forum-Konulari']
    # Burada hangi linklerin takip edileceğini belirteceğiz, bunun için regex i kullandım. Aşağıdaki ifadede neler olduğuna gelince: Forum la başlayan devamında alfabedeki büyük küçük karakterlerin, rakamların veya tire işaretinin kullanıldığı tüm linkleri takip et dedik. Yalnız bazı konuların 2-3-4... gibi devam eden ek sayfaları takip etmemek için \/(?![0-9]) desenini de ekledim. Son olarak da bu kurala uyan tüm linkleri parselle fonksiyonuna havale ettik. 
        rules = [Rule(SgmlLinkExtractor(allow=[r'(Forum)([a-zA-Z0-9-])+\/(?![0-9])']), 'parselle')]
    
    # parsellediğimiz linklere ne olacağını burada belirleyeceğiz.
        def parselle(self, response):
    # Bu sefer de xpath i kullanacağız.
            x = HtmlXPathSelector(response)
    
            icerik = Tbt2Item()
    # geldiğimiz url yi url değişkenine atayalım.
            icerik['url'] = response.url
    # Konu başlığını almak için class'i Sol olan tüm td etiketlerinin içerisindeki yazı kısmını 'text()' çekiyoruz. Yalnız araya boşluklar da kaynadığı için burada xpath ile regex'i birlikte kullandım. regex sayesinde sadece yazının yani konu başlığının olduğu kısmı aldım.
            icerik['konu'] = x.select('//td[@class=\'Sol\']/text()').re(r'\w+.*')
    # Burayı nasıl anlatacağımı bilemedim birden :) Konudaki ilk mesajın yolunu tarif ettik. Nedendir bilmem tbody etiketini kabul etmedi. Bende can sıkıntısı işte neredeyse bütün yolu yazdım. Bir noktaya dikkat etmenizi istiyorum belirttiğimiz yolun sonlarına doğru /text() kullandık. Bu yüzden ilk mesaj içerisindeki linkler, kodlar vs. alınmayacaktır.  Eğer tüm içeriği almak isterseniz /text() kısmını silmeniz yeterli.
            icerik['ilkmesaj'] = x.select('//table[@id=\'mainforumconent\']/tr/td/div[1]/table[@class=\'categorytable\']/tr[2]/td[2]/div[1][@class=\'forummsg\']/p/text()').extract()
            return icerik 
    

    xml örnek çıktı:

    <?xml version="1.0" encoding="utf-8"?>
    <items>
    <item>
    <url>
    http://tahribat.com/Forum-Oyku-Kitabim-177413/
    </url>
    <ilkmesaj>
    <value>
    Sa beyler daha oncede konu acmistim hatirlamayanlar icin ozet geciyim yazarlik yetenegim var 300 kusur oyku yazdim gyzellerinden secip bastirmak istiyorum korku ve fantastik tarzda oykuler ve okuyanlar begendiklerini belirttiler sadede gelelim sevmedigim bir iste calisiyorum ve isi birakmak icinde 40 50m bi garantiye ihtiyacim var ama turkiyede bir oyku kitabi nekadar satabilir kestiremiyorum sizce? Para icin yazilmaZ muabbetine girmesseniz sevinirim hacilar ayrica telden yaziyorum ozensiz yazi...
    </value>
    </ilkmesaj>
    <konu>
    <value>
    ykü Kitabım 
    </value>
    </konu>
    </item>
    <items>

     

    csv örnek çıktı:

    url,ilkmesaj,konu
    http://tahribat.com/Forum-Kablosuz-Modem-Access-Point-171072/,Hocalar şimdi benim evde net ve birde kablosuz modem var. Ben bununla beraber neti ev içinde rahatça kullanıyorum. Neyse kuzende neti kullanmak istedi ve üst kattan alt kata kablo çektik bunun için. Daha sonra kuzen bu kabloyu kendi kablosuz modemime bağlamış ve kullanıyorum diyor ama çok yakından çekiyormuş. Uzaklardan çekmiyormuş. Nedeni ne olabilir. Ve ben kendi bilgisayarımdan kuzenin modemine erişim sağlayabilir miyim ?,"Kablosuz Modem / Access Point
    " 

    İndir: http://www.dosya.tc/server6/C1BVNG/tbt2.zip.html

    Not:
    Açıklama satırları indirilebilir kodlarda yok.
    İşin ustası falan değilim, zor soru sormayın. :)

    Tavsiye: 
    Bu işe girişmeden önce düzenli ifadeler (regex) ve xpath'e göz atın. Doğru desenleri bulması biraz(!) sıkıntılı olabiliyor.
    regex denemeleri için http://gskinner.com/RegExr/ adresini kullanabilirsiniz.
    Takıldığınız bir noktayı internette aramadan önce manuel e bakmanızda fayda var: http://doc.scrapy.org/en/0.16/index.html
    Xpath için size yardımcı olabilecek Firefox'ta Firebug, Google Chrome'da da xpathOnClick0.0.0.6 eklentisini tavsiye ederim.

    telekom tarafından 24/Nis/13 15:27 tarihinde düzenlenmiştir

    vatandaşa kafam girsin!..
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    GUS
    GUS's avatar
    Kayıt Tarihi: 24/Şubat/2013
    Erkek

    çizik


Toplam Hit: 3394 Toplam Mesaj: 12