2014-04-01 11 views
9

ich eine 302-Antwort von einem Server erhalte, während eine Website Verschrottung:wie zu handhaben 302-Umleitung in 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> 

Ich mag Anfrage senden Urls GET statt umgeleitet zu werden. Jetzt fand ich diese Middleware:

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

ich diese Umleitung Code meiner middleware.py Datei hinzugefügt und fügte ich diese in settings.py:

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

Aber ich bin immer noch umgeleitet zu werden. Ist das alles, was ich tun muss, damit diese Middleware funktioniert? Vermisse ich etwas?

+0

Sie werden Sie wahrscheinlich endlos umleiten, um Sie davon abzuhalten, die Seite zu scrappen. Zumindest glaubt mir das die URL. – elbear

+0

Ja, das ist offensichtlich ihre Teilnahme und der Grund, warum ich diese Frage gestellt habe. Es ist keine Endlosschleife, es ist einfach eine 302-Weiterleitung, die ursprüngliche URL wird immer noch als GET empfangen: von und das ist die URL, an die ich meine Anfrage senden möchte. Soweit ich das lesen kann, ist das möglich und ich habe ein Skript dafür gefunden, aber aus irgendeinem Grund funktionieren meine Einstellungen nicht. – mrki

+0

Ich meinte nicht, dass es eine Endlosschleife ist. Ich meinte, dass du jedes Mal, wenn du eine Anfrage machst, umgeleitet wirst, also weigern sie sich, dir den Inhalt zu geben. – elbear

Antwort

1

Ich habe diese Umleitung Code meiner middleware.py Datei und ich habe dieses Bild in settings.py:

DOWNLOADER_MIDDLEWARES_BASE sagt, dass RedirectMiddleware bereits standardmäßig aktiviert ist, also was Sie spielt keine Rolle hat .

Ich möchte Anfrage an GET URLs statt Umleitung senden.

Wie? Der Server antwortet mit 302 auf Ihre GET Anfrage. Wenn Sie unter derselben URL erneut GET eingeben, werden Sie erneut weitergeleitet.

Was versuchen Sie zu erreichen?

Wenn Sie nicht umgeleitet werden möchten, finden diese Fragen:

9

über Middle in diesem Szenario vergessen, wird dies den Trick:

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

Das heißt, müssen Sie Meta-Parameter enthalten, wenn Sie Ihre Anfrage ergeben:

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

Hat nicht mit der aktuellen Scrapy-Version für mich gearbeitet, ich habe mit anderen Codes in der handle_httpstatus_list wie 404 versucht, und funktioniert gut. Es funktioniert einfach nicht mit 301 und 302. Irgendwelche Ideen? –

+0

@mrki Wie Umleitung manuell für Start-URL, bedeutet, wenn start_urls wohin woanders umgeleitet wird? –

1

ich ein Problem mit Endlosschleife auf Umleitungen hatte, als HTTPCACHE_ENABLED = True verwenden. Ich habe es geschafft, das Problem zu vermeiden, indem ich HTTPCACHE_IGNORE_HTTP_CODES = [301,302] setzte.

Verwandte Themen