2013-05-30 11 views
8

Używam Scrapy do przeszukiwania niektórych stron. Pobieram dane start_urls z arkusza Excela i muszę zapisać URL w elemencie.Jak uzyskać oryginalny start_url w scrapy (przed przekierowaniem)

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 

Problem polega na tym, że adres URL zostaje przekierowany do innego adresu URL (a tym samym daje coś innego w adresie URL odpowiedzi). Jak mogę uzyskać oryginalny adres URL, który otrzymałem od programu Excel?

+0

Próbowałeś 'response.request.url'? – alecxe

+0

@alecxe: tak, spróbował tego również, ponownie dostałem przekierowany adres URL, ten sam URL, który dostałem z response.url –

Odpowiedz

16

Możesz znaleźć to, czego potrzebujesz w response.request.meta['redirect_urls'].

Cytat docs:

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

nadzieję, że pomoże.

+0

Awesome! to działało, wielkie dzięki! –

+0

@alecxe czy masz pojęcie, dlaczego 'response.request.meta ['redirect_urls']' może działać w powłoce scrapy, ale rzucić 'exceptions.KeyError: 'redirect_urls'', gdy jest używany w skrypcie? Wiem, że przekierowanie pojawia się podczas patrzenia na 'response.url' – AdO

+0

@AdO brzmi jak specyficzny przypadek użycia, czy mógłbyś utworzyć nowe osobne pytanie i podać wszystkie szczegóły, podrzuć mi link tutaj, przyjrzę się. Dzięki! – alecxe

Powiązane problemy