2016-02-11 32 views
7

Używamy scrapy-splash middleware do przekazywania skradzionego źródła HTML przez silnik javascript Splash działający w kontenerze dokowania.Scrapy Shell i Scrapy Splash

Jeśli chcemy wykorzystać Splash w pająka, możemy skonfigurować kilka required project settings i otrzymując Request określając konkretne meta arguments:

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, 
    } 
}) 

to działa zgodnie z dokumentacją. Ale jak możemy użyć scrapy-splash wewnątrz Scrapy Shell?

+2

To prawda, że ​​nie ma "DEFAULT_REQUEST_META", ponieważ istnieje [DEFAULT_REQUEST_HEADERS] (http://doc.scrapy.org/en/latest/topics/settings.html?#std:setting-DEFAULT_REQUEST_HEADERS), co byłoby miłym dodanie. Istnieją otwarte dyskusje na temat domyślnego włączenia Splash za pośrednictwem oprogramowania pośredniego (zobacz https://github.com/scrapinghub/scrapy-splash/issues/11). Inną opcją jest podklasa scrapy-splash mdw i wymuszenie tam ustawień. Pomysły mile widziane na https://github.com/scrapinghub/scrapy-splash/issues –

Odpowiedz

12

po prostu zapakuj URL, który chcesz zdjąć w splash http api.

Więc chcesz coś takiego:

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

gdzie localhost:port gdzie usługa powitalny pracuje
url jest url chcesz indeksować i nie zapomnij urlquote to!
render.html jest jednym z możliwych punktów końcowych HTTP API zwraca redered stronę html w tym przypadku
timeout czas w sekundach czas oczekiwania
wait w sekundach czas oczekiwania na wykonanie javascript przed odczyt/zapis html.

+0

prawdopodobnie można utworzyć alias bash, aby było to wygodniejsze. – Granitosaurus

9

Możesz uruchomić scrapy shell bez argumentów w skonfigurowanym projekcie Scrapy, następnie utworzyć req = scrapy_splash.SplashRequest(url, ...) i zadzwonić pod numer fetch(req).