2014-09-14 1 views
4

나는 매우 기본적인 치료 스파이더가 있습니다.이 스파이더는 파일에서 URL을 가져 와서 다운로드합니다. 유일한 문제는 일부 도메인이 동일한 도메인 내의 약간 수정 된 URL로 리디렉션 된 것입니다. 내가 내 콜백 함수를 response.meta을 사용하여 그들을 얻고 싶습니다, 그리고 그것은 정상적인 URL에서 작동하지만, URL을 리디렉션 콜백 전화를받지 않는 것 같습니다. 어떻게 해결할 수 있습니까? 여기 내 코드가 있습니다. 리디렉션 후 치료 콜백

from scrapy.contrib.spiders import CrawlSpider 
from scrapy import log 
from scrapy import Request 
class DmozSpider(CrawlSpider): 
    name = "dmoz" 
    handle_httpstatus_list = [302] 
    allowed_domains = ["http://www.exmaple.net/"]) 
    f = open("C:\\python27\\1a.csv",'r') 
    url = 'http://www.exmaple.net/Query?indx=' 
    start_urls = [url+row for row in f.readlines()] 
    def parse(self, response): 
      print response.meta.get('redirect_urls', [response.url]) 
      print response.status 
      print (response.headers.get('Location')) 

는 또한 그 같은 시도했다 :

def parse(self, response): 
     return Request(response.url, meta={'dont_redirect': True, 'handle_httpstatus_list':  [302]}, callback=self.parse_my_url) 
def parse_my_url(self, response): 
     print response.status 
     print (response.headers.get('Location')) 

을 그리고 그 중 하나가 작동하지 않습니다.

답변

2

기본적으로 치료 요청은 리디렉션됩니다. 리디렉션하지 않으려면 start_requests 메소드를 사용하고 요청 메타에 플래그를 추가하십시오.

def start_requests(self): 
     requests =[(Request(self.url+u, meta={'handle_httpstatus_list': [302], 
           'dont_redirect': True},   
        callback=self.parse)) for u in self.start_urls] 
     return requests 
+0

아니요, 리디렉션 된 URL을 가져올 필요가 있습니다.이 경우에는 유용합니다. – hellpanderrr

+0

콜백 함수에서 가져올 수 있습니다. 링크 **에서 이동해야합니다. 그렇지 않으면 헤더 아래에서 URL을 가져올 수 있습니다. –