2017-11-14 4 views
0

Ich habe einen Crawler ohne Probleme laufen, aber ich muss die start_url und nicht die umgeleitet bekommen.Scrapy erhalten Pre-Redirect-URL

Das Problem ist, ich verwende Regeln, um Parameter an die URL (wie field-keywords = xxxxx) zu übergeben und schließlich die richtige URL zu bekommen.

Die Parsing-Funktion beginnt immer das Element ohne Probleme Attribute, aber wenn ich die Start-URL (die wahre) wollen speichert es die eine umgeleitet ...

Ich habe versucht habe:

response.url 
response.request.meta.get('redirect_urls') 

Beide geben die letzte URL (die umgeleitete URL) und nicht die start_url zurück.

Einige wissen, warum, oder hat eine Ahnung?

Vielen Dank im Voraus.

Antwort

1

ein Spider Middleware verwenden mit extrahieren Spur der Start-URL zu halten von jeder Antwort:

from scrapy import Request 

class StartRequestsMiddleware(object): 

    start_urls = {} 

    def process_start_requests(self, start_requests, spider): 
     for i, request in enumerate(start_requests): 
      request.meta.update(start_url=request.url) 
      yield request 

    def process_spider_output(self, response, result, spider): 
     for output in result: 
      if isinstance(output, Request): 
       output.meta.update(
        start_url=response.meta['start_url'], 
       ) 
      yield output 

verfolgen die start_url jede Antwort kommt aus mit:

response.meta['start_url'] 
0

Haben Sie versucht response.request.url? Ich persönlich würde überschreibt die start_requests Methode, um die ursprüngliche URL in der Meta-Zugabe, so etwas wie:

yield Request(url, meta={'original_request': url}) 

Und dann response.meta['original_request']

Verwandte Themen