2016-02-11 23 views
7

scrapy-splash middleware, kazınmış HTML kaynağını, bir docker konteynerinin içinde çalışan Splash javascript motoru üzerinden geçiriyoruz. Biz örümcek içinde Splash kullanmak istiyorsanızScrapy Shell ve Scrapy Splash

, biz required project settings birkaç yapılandırmak ve bir Request belirli meta arguments belirterek verim: belgelenmiş gibi çalışır

yield Request(url, self.parse_result, meta={ 
    'splash': { 
     'args': { 
      # set rendering arguments here 
      'html': 1, 
      'png': 1, 

      # 'url' is prefilled from request url 
     }, 

     # optional parameters 
     'endpoint': 'render.json', # optional; default is render.json 
     'splash_url': '<url>',  # overrides SPLASH_URL 
     'slot_policy': scrapyjs.SlotPolicy.PER_DOMAIN, 
    } 
}) 

. Ancak, 'un içinde scrapy-splash'u nasıl kullanabiliriz?

+2

Bir DEFAULT_REQUEST_HEADERS (http://doc.scrapy.org/en/latest/topics/settings.html?#std:setting-DEFAULT_REQUEST_HEADERS ilave. Varsayılan olarak bir ara yazılım aracılığıyla Splash'i etkinleştirmeye yönelik açık tartışmalar vardır (bkz. Https://github.com/scrapinghub/scrapy-splash/issues/11). Başka bir seçenek, scrapy-splash mdw alt sınıfını ve buradaki zorlama ayarlarını yapmaktır. Fikirler https://github.com/scrapinghub/scrapy-splash/issues –

cevap

12

yalnızca kabuklamak istediğiniz URL'yi splash http api içine sarın.

Böylece gibi bir şey isteyeyim:

scrapy shell 'http://localhost:8050/render.html?url=http://domain.com/page-with-javascript.html&timeout=10&wait=0.5' 

senin sıçrama servis
url Eğer urlquote o unutmak taramasını istediğiniz ve dont url'dir yayınlandığı yeri localhost:port olduğunu

!
render.html, olası http API uç noktaları biridir javascript html tasarrufu/okumadan önce yürütmek için beklemek zaman aşımı için saniyede bu durumda saniyede
wait zaman
timeout zaman redered html sayfasını döndürür.

+0

adresinden hoş geldiniz, muhtemelen bunu daha kullanışlı hale getirmek için bir bash takma ad oluşturabilirsiniz. – Granitosaurus

9

Yapılandırılmış bir Scrapy projesinde argümanlar olmadan scrapy shell'u çalıştırabilir, ardından req = scrapy_splash.SplashRequest(url, ...)'u oluşturabilir ve fetch(req) numaralı telefonu arayabilirsiniz.