2011-10-14 18 views
13

Birkaç web sitesini kazımak için Scrapy'u kullanmaya başladım. Daha sonra modelime yeni bir alan eklersem veya ayrıştırma işlevlerimi değiştirirsem, indirilen ham verileri çevrimdışına yeniden kazımak için "yeniden oynatmak" isterdim.Depolanmış veriler üzerinde bir Scrapy örümceğini yeniden oynatın

http://dev.scrapy.org/browser/scrapy/trunk/scrapy/command/commands/replay.py?rev=168

Ama bu işlevsellik scrapy geçerli sürümünde kaldırılmış gibi görünüyor: scrapy bir noktada tekrar dosyasında ham verileri depolamak için yeteneği varmış gibi görünüyor. Bunu başarmanın başka bir yolu var mı?

+1

Eğer ML de sormak çalıştım tarama devam etmek deneyin? Sorunuzu sorarsam ve sadece cevabı yapıştırırsam, bana haksızlık hisseder: P – naeg

+1

Sorunuma bir çözüm bulursanız, bu benim tarafımdan kaynaklanır - sadece kaynağınıza bakın;) – del

cevap

18

crawl --record=[cache.file] [scraper]'u çalıştırırsanız, replay [scraper]'u kullanabilirsiniz.

Alternatif olarak, DOWNLOADER_MIDDLEWARES dahil ederek HttpCacheMiddleware ile tüm yanıtları önbelleğe alabilir: Bunu yaparsanız, size kazıyıcı çalıştırmak her zaman, ilk dosya sistemini kontrol edecek

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 300, 
} 

. emekleme özgeçmiş uygulamak için tüm http isteği ve yanıtını önbelleğe

http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html?highlight=FilesystemCacheStorage#httpcache-enabled söylediği gibi

+0

Terapi taramasını denedim --record = mycache myspider 've hata mesajı aldım" tarama: hata: böyle bir seçenek yok: --record ". Scrapy 0.12.0.2548 kullanıyorum. HttpCacheMiddleware kullanma, farklı yanıtlar döndürecek zaman içinde birden fazla aynı istekte bulunacağından işe yaramaz. – del

3

Sen HTTPCACHE_ENABLED etkinleştirebilirsiniz.

VEYA İşler duraklatma ve http://scrapy.readthedocs.org/en/latest/topics/jobs.html

+0

Farklı yanıtlar verecek, zamanla aynı istekleri yapmak istiyorsam bu işe yaramaz. Örneğin, her saat slashdot.org ana sayfasını kazımak istersem? Önbelleğe alınan girdinin her saatin üzerine yazılacağından bunu tekrarlayamıyorum. – del