用JSONP抓取数据
2018-06-26 本文已影响25人
fred_33c7
jsonp,vue,前端
很多网站都是用jsonp传输数据的,可以抓取这些数据。
提供一个封装好的jsonp方法。
首先需要安装jsonp包npm install jsonp
import originJsonp from 'jsonp'
export default function jsonp2(url, data, option) {
url += (url.indexOf('?') < 0 ? '?' : '&') + param(data)
return new Promise((resolve, reject) => {
originJsonp(url, option, (err, data) => {
if (!err) {
resolve(data)
} else {
reject(err)
}
})
})
}
function param(data) {
let url = ''
for (var k in data) {
let value = data[k] !== undefined ? data[k] : ''
url += '&' + k + '=' + encodeURIComponent(value)
}
return url ? url.substring(1) : ''
}
这样就可以提交param来获取jsonp
image.png
例如这个qq音乐的web端,我们就发现这么一个ajax,用来传输首页得音乐列表。可以用我们上面的方法来获取。
import jsonp from 'common/js/jsonp'
import {commonParams, options} from './config'
import axios from 'axios'
export function getRecommend() {
const url = 'https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg'
const data = Object.assign({}, commonParams, {
platform: 'h5',
uin: 0,
needNewCode: 1
})
return jsonp(url, data, options)
}
使用时,在组件的methods方法中调用getRecommend()
方法,就可以看到了。我们console.log()
一下试一试
发现这个列表我们已经获取到了。