Scrapy处理301/302响应代码以及跟踪目标网址

时间:2016-03-21 06:24:14

标签: web-scraping scrapy scrapy-spider

我使用scrapy版本1.0.5来实现爬虫。目前,我已将REDIRECT_ENABLED = Falsehandle_httpstatus_list = [500, 301, 302]设置为使用301和302响应来抓取页面。但是,由于REDIRECT_ENABLED设置为False,因此蜘蛛不会转到Location响应标头中的目标网址。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

这是一个很长的版本,因为我做了这样的事情,但你需要生成一个带有url,meta和callback参数的请求对象。

但我似乎记得你可以按照以下方式做到:

def parse(self,response):
    # do whatever you need to do .... then
    if response.status in [301, 302] and 'Location' in response.headers:
        # test to see if it is an absolute or relative URL
        newurl = urljoin(request.url, response.headers['location'])
        # or 
        newurl = response.headers['location']
        yield Request(url = newurl, meta = request.meta, callback=self.parse_whatever)