2014-04-01 21 views
9

Otrzymuję 302 odpowiedzi z serwera podczas złomowania stronę internetową:jak obsługiwać przekierowanie 302 w 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> 

Chcę wysłać żądanie, aby uzyskać adres URL, zamiast być przekierowany. Teraz znalazłem ten middleware:

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

I dodało ten kod przekierowania do mojego pliku middleware.py i dodałem to do settings.py:

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

Ale ja wciąż uzyskiwanie przekierowany. Czy to wszystko, co muszę zrobić, aby to oprogramowanie pośrednie działało? Czy coś mi brakuje?

+0

Prawdopodobnie przekierowują Cię bez końca, aby uniemożliwić skrobanie witryny. Przynajmniej taki jest adres URL. – elbear

+0

Tak, oczywiście, ich obecność i powód, dla którego napisałem to pytanie. Nie jest to nieskończona pętla - proste przekierowanie 302, oryginalny adres URL jest nadal odbierany jako GET: od i to jest adres URL, do którego chcę wysłać moją prośbę. O ile mogę przeczytać, jest to możliwe i znalazłem skrypt do tego, ale z jakiegoś powodu moje ustawienia nie działają. – mrki

+0

Nie miałem na myśli, że to niekończąca się pętla. Chodziło mi o to, że za każdym razem, gdy wysyłasz prośbę, jesteś przekierowywany, więc odmawiają podania treści. – elbear

Odpowiedz

1

dodałem ten kod przekierowania do mojego pliku middleware.py i dodałem to do settings.py:

DOWNLOADER_MIDDLEWARES_BASE mówi, że RedirectMiddleware jest już domyślnie włączone, więc to, co nie miało znaczenia .

Chcę wysłać prośbę o pobranie adresów URL zamiast przekierowania.

Jak? Serwer odpowiada 302 na żądanie GET. Jeśli ponownie zrobisz GET na tym samym adresie URL, zostaniesz przekierowany ponownie.

Co próbujesz osiągnąć?

Jeśli chcesz nie być przekierowywane, zobacz te pytania:

9

zapomniał o middleware w tym scenariuszu będzie to rade:

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

Powiedział, że trzeba będzie to meta parametr podczas uzyskując swoją prośbę:

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

Nie pracował dla mnie z aktualną wersją Scrapy, próbowałem z innymi kodami na handle_httpstatus_list jak 404 i działałem dobrze. To po prostu nie działa z 301 i 302. Jakieś pomysły? –

+0

@mrki Jak ręcznie przekierować ręcznie na adres startowy, czyli czy start_urls jest przekierowany do jakiegoś innego miejsca? –

1

miałem problem z nieskończonej pętli na przekierowań podczas korzystania HTTPCACHE_ENABLED = True. Udało mi się uniknąć problemu, ustawiając HTTPCACHE_IGNORE_HTTP_CODES = [301,302].