2015-12-23 142 views
3

我需要在下载响应之前修改我的请求url。但我无法改变它。即使在使用request.replace(url=new_url)修改请求网址之后,process_response也会打印未修改的网址。这里是中间件的代码:如何在scrapy中提出请求之前更改请求url?

def process_request(self, request, spider): 
    original_url = request.url 
    new_url= original_url + "hello%20world" 
    print request.url   # This prints the original request url 
    request=request.replace(url=new_url) 
    print request.url   # This prints the modified url 

def process_response(self, request, response, spider): 
    print request.url   # This prints the original request url 
    print response.url   # This prints the original request url 
    return response 

任何人都可以告诉我我在这里失踪了什么?

回答

3

因为要修改的request对象process_request() - 你需要返回它

def process_request(self, request, spider): 
    request = request.replace(url=request.url + "hello%20world") 
    return request 
+0

它进入一个无限循环。但我现在得到了流量。我需要返回新的请求,以便它可以被处理。我用'if'条件检查URL是否被修改,然后返回请求。谢谢您的帮助。 – Rahul