2014-04-01 14 views
9

Sto ricevendo una risposta 302 da un server, mentre la demolizione di un sito web:come gestire reindirizzamento 302 nel Scrapy

2014-04-01 21:31:51+0200 [ahrefs-h] DEBUG: Redirecting (302) to <GET http://www.domain.com/Site_Abuse/DeadEnd.htm> from <GET http://domain.com/wps/showmodel.asp?Type=15&make=damc&a=664&b=51&c=0> 

voglio inviare richiesta di GET gli URL invece di essere reindirizzato. Ora ho trovato questo middleware:

https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/downloadermiddleware/redirect.py#L31

ho aggiunto questo codice di reindirizzamento al mio file middleware.py e ho aggiunto questo in settings.py:

DOWNLOADER_MIDDLEWARES = { 
'street.middlewares.RandomUserAgentMiddleware': 400, 
'street.middlewares.RedirectMiddleware': 100, 
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': None, 
} 

Ma io sono ancora reindirizzato. È tutto ciò che devo fare per far funzionare questo middleware? Mi manca qualcosa?

+0

Probabilmente ti stanno reindirizzando all'infinito per impedirti di raschiare il sito. Almeno, questo è ciò che l'URL mi fa credere. – elbear

+0

Sì, questo è ovviamente il loro intervento e il motivo per cui ho postato questa domanda. Non è un ciclo infinito, è un semplice reindirizzamento 302, l'url originale è ancora ricevuto come GET: da e questo è l'URL a cui voglio inviare la mia richiesta. Per quanto posso leggere è possibile e ho trovato uno script per questo, ma per qualche motivo le mie impostazioni non funzionano. – mrki

+0

Non volevo dire che è un ciclo infinito. Intendevo dire che ogni volta che fai una richiesta, sei reindirizzato, quindi si rifiutano di darti il ​​contenuto. – elbear

risposta

1

ho aggiunto questo codice di reindirizzamento al mio file middleware.py e ho aggiunto questo in settings.py:

DOWNLOADER_MIDDLEWARES_BASE dice che RedirectMiddleware è già abilitato di default, quindi quello che hai fatto non importava .

Desidero inviare una richiesta per ottenere gli URL anziché essere reindirizzati.

Come? Il server risponde con 302 sulla richiesta GET. Se esegui lo GET sullo stesso URL, verrai reindirizzato di nuovo.

Cosa stai cercando di ottenere?

Se si desidera non essere reindirizzati, vedere queste domande:

9

dimenticato di middleware in questo scenario, questo farà il trucco:

meta = {'dont_redirect': True,'handle_httpstatus_list': [302]} 

Detto questo, è necessario includere meta parametro quando si cede la richiesta:

yield Request(item['link'],meta = { 
        'dont_redirect': True, 
        'handle_httpstatus_list': [302] 
       }, callback=self.your_callback) 
+0

Non ha funzionato per me con la versione corrente di Scrapy, ho provato con altri codici nella lista_statich_stile handle come 404 e funziona bene. Non funziona con 301 e 302. Qualche idea? –

+0

@mrki Come annullare manualmente il reindirizzamento per l'URL di avvio, significa che start_urls viene reindirizzato ad altri dove? –

1

ho avuto un problema con il ciclo infinito quando si utilizzano i reindirizzamenti HTTPCACHE_ENABLED = True. Sono riuscito a evitare il problema impostando HTTPCACHE_IGNORE_HTTP_CODES = [301,302].

Problemi correlati