获取数据相关(其他网站)

1:jsonp

新建一个script标签,通过script的src属性去获取网站数据

function getDate(data){
  //处理数据
}
var s=document.createElement('script');
s.src=url;
document.getElementsByTagName('body').appendChild('s');

2:ajax

一般会遇到同源策略的问题

function getXMLHttpRequest() {  
              var xhr;  
              if(window.ActiveXObject) {  
                       xhr= new ActiveXObject("Microsoft.XMLHTTP");  
              }else if (window.XMLHttpRequest) {  
                       xhr= new XMLHttpRequest();  
              }else {  
                       xhr= null;  
              }  
              return xhr;  
    }  
      
    function save() {  
              var xhr = getXMLHttpRequest();  
              xhr.open("post","url");  
              var data = "name=mikan&address=street...";  
              xhr.send(data);  
              xhr.onreadystatechange= function() {  
                       if(xhr.readyState == 4 && xhr.status == 200) {  
                                alert("returned:"+ xhr.responseText);  
                       }  
              };  
    }

解决方法:1.在后台处理,允许相关域名访问

//设置跨域访问  
app.all('*', function(req, res, next) {  
    res.header("Access-Control-Allow-Origin", "*");  
    res.header("Access-Control-Allow-Headers", "X-Requested-With");  
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");  
    next();  
});

2.后台代理 node后台代理使用的是http-proxy-middleware

//实现代理
var proxyMiddleWare = require("http-proxy-middleware");

/*var options = {
  target: 'https://c.y.qq.com', // target host
  changeOrigin: true,               // needed for virtual hosted sites    // proxy websockets
  pathRewrite: {
    '^/apis' : '',    // rewrite path
  },
  remoteAddress:'101.227.139.217:443'//可能没有用
};*/
var options = {
  target: 'https://user.qunar.com', // target host
  changeOrigin: true,               // needed for virtual hosted sites    // proxy websockets
  pathRewrite: {
    '^/apis' : '',    // rewrite path
  },
  remoteAddress:'101.227.139.217:443'//可能没有用
};

var app = express();

var exampleProxy = proxyMiddleWare(options);

app.use('/apis', exampleProxy);//当请求已apis开头的路径时,会自动跳转到相应的qq路径

后台请求数据(无跨域)

node用的模块是superagent

var request = require("superagent");
var data = {
        appid: appId,
        secret: sessionKey,
        js_code: js_code,
        grant_type: grant_type
    };//这是需要提交的数据
    request
        .get('https://api.weixin.qq.com/sns/jscode2session')
        .query(data)
        .end(function (err, resd) {
            res.send({data: resd.text});
        });

爬虫爬取(scrapy)

需要得到js渲染完之后的数据,所以利用scrapy-splash爬取JS生成的动态页面
链接地址

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容