2013-05-06 5 views
5

Sto raschiando un sito Web utilizzando Scrapy che richiede la cottura e il java-script per essere abilitato. Non penso che dovrò effettivamente elaborare javascript. Tutto ciò di cui ho bisogno è fingere che javascript sia abilitato.Come inviare JavaScript e cookie abilitati in Scrapy?

Ecco che cosa ho provato: 1) attivare i cookie attraverso il seguente nelle impostazioni

COOKIES_ENABLED = True 
COOKIES_DEBUG = True 

2) usando Scaricare middleware per i cookie

DOWNLOADER_MIDDLEWARES = { 
    'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400, 
    'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware':700 
} 

3) Invio di 'X-abilitato per JavaScript ':' True '

DEFAULT_REQUEST_HEADERS={ 
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'Accept-Language': 'en', 
    'X-JAVASCRIPT-ENABLED': 'True' 
} 

ma nessuno di loro sta lavorando con me. Potete suggerire qualche idea o darmi qualche indicazione?

Grazie in anticipo per le risposte.

risposta

1

Scrapy non supporta lo script java.

ma

è possibile utilizzare alcuni altra libreria con Scrapy per l'esecuzione di JS, come Webkit, selenio, ecc,

e non si ha bisogno di abilitare i cookie (COOKIES_ENABLED = True), nemmeno necessario aggiungere DOWNLOADER_MIDDLEWARES nella vostra settings.py perché sono già disponibili in default scrapy settings

+0

Akhter, Grazie per la risposta. Come ho detto, non avrò bisogno di elaborare JavaScript. Il server non mi darà la pagina effettiva se il seed javascript non è abilitato sulla fonte richiedente. Devo solo inviare un segnale al server che javascript e cookie siano abilitati. –

4

per quanto ne so, non esiste una soluzione universale. Devi eseguire il debug del sito, per vedere come determina che Javascript non è supportato/abilitato dal tuo client.

Non penso che il server guardi l'intestazione X-JAVASCRIPT-ENABLED. Forse c'è un cookie impostato da Javascript quando la pagina viene caricata in un vero browser abilitato per javascript? Forse il server guarda l'intestazione user-agent?

Vedere anche this response.

+0

Beh, sì ... Potrebbe essere una buona direzione per me lavorare su ... –

4

Dovresti provare il motore Splash JS con scrapyjs. Ecco un esempio di come configurarlo nel progetto ragno:

SPLASH_URL = 'http://192.168.59.103:8050' 
DOWNLOADER_MIDDLEWARES = { 
    'scrapyjs.SplashMiddleware': 725, 
} 

Scraping hub che è la stessa azienda dietro Scrapy, ha special instances per eseguire i ragni con spruzzata abilitato.

poi cedere SplashRequest invece di Request nel vostro ragno in questo modo:

import scrapy 
from scrapy_splash import SplashRequest 

class MySpider(scrapy.Spider): 
    start_urls = ["http://example.com", "http://example.com/foo"] 

    def start_requests(self): 
     for url in self.start_urls: 
      yield SplashRequest(url, self.parse, 
       endpoint='render.html', 
       args={'wait': 0.5}, 
      ) 

    def parse(self, response): 
     # response.body is a result of render.html call; it 
     # contains HTML processed by a browser. 
     # …