2013-10-05 3 views
0

요청 객체의 url을 변경할 수있는 scrapy의 다운로드 milddleware를 작성하려고합니다. 그러나 다운로드 페이지가 여전히 원래의 URL이므로 process_request와 함께 작동시킬 수는 없습니다. 거미에 대한Scrapy : downloadMiddleware의 process_request에서 요청 객체의 url을 변경할 수 없습니다.

#middlewares.py 
class UrlModifyMiddleware(object): 
    def process_request(self, request, spider): 
     original_url = request.url 
     m_url = 'http://whatsmyuseragent.com/' 
     request.url = m_url 
     #request = request.replace(url=relay_url) 

코드 :

#spider/test_spider.py 
from scrapy.contrib.spiders import CrawlSpider 
from scrapy.http import Request 

class TestSpider(CrawlSpider): 
    name = "urltest" 
    start_url = "http://www.icanhazip.com/" 

    def start_requests(self): 
     yield Request(self.start_url,callback=self.parse_start) 

    def parse_start(self,response): 
     html_page = response.body 
     open('test.html', 'wb').write(html_page) 

settings.py에서 나는 설정 :

DOWNLOADER_MIDDLEWARES = { 
    'official_index.middlewares.UrlModifyMiddleware': 100, 
} 
+0

어떤 치료 버전을 사용하고 있습니까? 정확한 코드로 테스트 프로젝트를 수행하고 예상대로 작동했습니다. start request.url은 whatsmyuseragent.com입니다. – Rolando

+0

@Rho 답변 해 주셔서 감사합니다. 나는 0.14.4를 사용하고있다. – Arnold

답변

0

나는 scrapy 0.18.0 내 정확한 코드를 테스트 다음과 같이 내 코드입니다. 코드가 제대로 작동합니다. 아마 버전 0.14.4의 버그 일 것입니다.

관련 문제