2010-02-28 19 views
11

Birkaç haber portalı web sitesinden haber resimleri çekmek için Scrapy'ye dayanan bir web tarayıcısı oluşturmak istiyorum. There is paletli istiyorum:Sonsuza kadar çalıştırmak için Scrapy dayalı bir web tarayıcısı nasıl oluşturulur?

  1. Çalıştır sonsuza

    o güncellemeleri almak için bazı portal sayfalarını yeniden ziyaret periyodik edecek demek.

  2. Zamanlama öncelikleri.

    Farklı türde URL'lere farklı öncelikler verin. Çoklu iş parçacığı Ben scrapy belgesini okudum ama listede şeyle ilgili bir şey bulamadım

getirme

  • (belki yeterince dikkatli değilim). Burada nasıl yapılacağını bilen var mı? ya da sadece onun hakkında bir fikir/örnek verin. Teşekkürler!

  • cevap

    12

    Scrapy, web sitelerinin örümceklenmesi için bir çerçevedir, bu nedenle ölçütlerinizi desteklemesi amaçlanmıştır, ancak sizin için kutunun dışında dans etmeyecektir; Muhtemelen bazı görevler için modüle aşina olmak zorunda kalacaksınız.

    1. Sonsuza dek çalışan bir uygulama Scrub çağırma uygulamanıza kalmış. the spiders'a nereye gideceğinizi ve ne zaman gideceğinizi söylersiniz.
    2. Öncelikleri vermek, Scrub oluşturmak ve takmak zorunda olduğunuz Scheduler middleware'un görevidir. Bu konuyla ilgili dokümantasyon sivilceli görünüyor ve koda bakmadım - prensipte fonksiyon var.
    3. Scrapy doğal olarak, arzu ettiğiniz şey olabilir: fundamentally asynchronous: A talebi hala beklemede iken B talebi karşılanabilir. Temel bağlantı motoru, çoklu iş parçacığından sizi engellemez, ancak Scrapy iş parçacığı hizmetleri sağlamamaktadır.

    Scrapy bir kitaplık değil, bir uygulamadır. Modülün kullanması gereken önemsiz miktarda iş (kod) vardır.

    +0

    Teşekkür! Anlayışımda, Örümcekler "tek seferlik" iş için çalışıyor gibi görünüyor (sadece belirtilen her şeyi tara ve bırak). Yani uzun süren bir paletli isterim, uygulamayı kendim yazmalı ve işi yapmak için örümcek çağırmalıyım. Scrub içindeki uzun süreli mantığı, middleware ya da başka bir şeyle uygulamak kolay değil, değil mi? – superb

    +0

    Örümcek Middleware katmanında yeniden örümcek mantığını uygulayabilirsiniz, ancak ilkel maddeler bunun için çok uygun görünmüyor ve benim hislerim, uygulama katmanı mantığını sunuş seviyesine itiyor olmanızdır. OSI terminolojisini kötüye kullanmasına izin verildi). http://doc.scrapy.org/topics/spider-middleware.html – msw

    +0

    Sağladığınız zamanlayıcı ara katman bağlantısı artık çalışmıyor. –

    0

    Sonsuza dek sürdürme zorunluluğu hakkında bazı ayrıntılar.

    signals.spider_idle sinyalini yakalamanız gerekir ve yönteminize,sinyaline bağlı olarak, DontCloseSpider istisnasını yükseltmeniz gerekir. Bekleyen istekleri olmadığında spider_idle sinyali scrapy motoruna gönderilir ve varsayılan olarak örümcek kapanır. Bu süreci engelleyebilirsin.

    bakınız kodları darbe:

    import scrapy 
    from scrapy.exceptions import DontCloseSpider 
    from scrapy.xlib.pydispatch import dispatcher 
    
    class FooSpider(scrapy.Spider): 
        def __init__(self, *args, **kwargs): 
         super(FooSpider, self).__init__(*args, **kwargs) 
         dispatcher.connect(self.spider_idle, signals.spider_idle) 
    
        def spider_idle(self): 
         #you can revisit your portal urls in this method 
         raise DontCloseSpider