0

我正在使用nodeJSrequest模块。我试图从网页上抓取数据,但我的数据来自一个 API,它只给我链接跟踪 url。

例如,这个链接:

http://www.kqzyfj.com/click-7227532-11292048?url=http%3A%2F%2Fwww.urbanoutfitters.com%2Furban%2Fcatalog%2Fproductdetail.jsp%3Fid%3D27074590

实际上导致这里:

http://www.urbanoutfitters.com/urban/catalog/productdetail.jsp?id=27074590&cm_mmc=CJ-_-Affiliates-_-Threadfinder-_-11292048

我知道大部分链接都嵌入在原始 URL 中,但情况并非总是如此,所以请忽略它/不要发布建议正则表达式解决此问题的答案!

使用请求,我如何获取页面URL(即第一个重定向到的第二个链接)并将其存储为变量?

4

2 回答 2

1

这应该这样做:

request(url, function(err, res, body){
    // get final redirect url
    if(this.redirects.length){
        var destUrl = this.redirects[this.redirects.length-1].redirectUri;
        console.log(destUrl);
    }
});
于 2013-08-19T01:28:41.873 回答
0

查看request.js 的第 77 行

它在名为的响应对象中提供了一个内部数组redirects

var request = require('request');
var url = "http://www.kqzyfj.com/click-7227532-11292048?url=http%3A%2F%2Fwww.urbanoutfitters.com%2Furban%2Fcatalog%2Fproductdetail.jsp%3Fid%3D27074590";

request(url, function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log("%j", response['request']['redirects'])
  }
})

然后,您可以找到具有重定向历史记录的数组的 JSON 表示,包括状态代码和重定向 URL。(我发现您提供的 URL 中有 3 个重定向)

于 2013-08-19T01:09:40.030 回答