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生成的动态页面
链接地址
网友评论