2013-05-30 11 views
8

Ich benutze Scrapy, um einige Seiten zu crawlen. Ich hole die start_urls von einem Excel-Blatt und ich muss die URL in dem Element speichern.Wie bekomme ich das Original start_url in scrapy (vor Redirect)

class abc_Spider(BaseSpider): 
    name = 'abc' 
    allowed_domains = ['abc.com']   
    wb = xlrd.open_workbook(path + '/somefile.xlsx') 
    wb.sheet_names() 
    sh = wb.sheet_by_name(u'Sheet1') 
    first_column = sh.col_values(15) 
    start_urls = first_column 
    handle_httpstatus_list = [404] 

    def parse(self, response): 
     item = abcspiderItem() 
     item['url'] = response.url 

Das Problem ist, dass die URL auf eine andere URL umgeleitet wird (und gibt somit noch etwas anderes in der Antwort-URL). Wie bekomme ich die Original-URL, die ich vom Excel bekommen habe?

+0

Haben Sie versucht "response.request.url"? – alecxe

+0

@alecxe: ja, habe das auch versucht, habe mir die umgeleitete URL wieder gebracht, die selbe URL, die ich von response.url bekommen habe –

Antwort

16

Sie können finden, was Sie in response.request.meta['redirect_urls'] benötigen.

Zitat von docs:

The urls which the request goes through (while being redirected) can be found in the redirect_urls Request.meta key.

Hoffnung, das hilft.

+0

Super! das hat funktioniert, vielen Dank! –

+0

@alecxe haben Sie eine Idee, warum 'response.request.meta ['redirect_urls']' könnte in der Scrapy-Shell arbeiten, sondern ein 'exceptions.KeyError: 'redirect_urls', wenn in einem Skript verwendet? Ich weiß, dass die Umleitung von "Response.url" auftritt. – AdO

+0

@AdO klingt wie Use-Case-spezifisch, könnten Sie eine neue separate Frage erstellen und alle Details, werfen Sie mir einen Link hier, ich werde einen Blick darauf werfen. Vielen Dank! – alecxe

Verwandte Themen