因为最近在做vue的项目,在前端做数据的时候遇到了数据抓取的难题,查了一些资料,自己也研究了一下,总体来说是搞出来了(基于黄奕老师的项目找出来的经验),废话不多说,直接上代码

----------------------------------------------------

----------------------------------------------------

----------------------------------------------------

先安装依赖:cnpm install --save jsonp

1. 然后创建一个jsonp.js
import originJSONP from 'jsonp'   //引用jsonp

  export default function jsonp(url,data,options){

    //地址判断和调用处理地址函数

    url +=(url.indexOf('?')<0?'?':'&')+param(data)

    //返回一个Promise

    return new Promise((resolve,reject)=>{

      originJSONP(url,options,(err,data)=>{  //用原始的jsonp调用有三个参数

        if(!err){

         resolve(data)

        }else{

         reject(err)

        }

      })

    })

  }
2、创建一个函数处理地址
  1 function param(data){
2
3 let url = '';
4
5 for(var k in data){
6
7 let value = data[k]!==undefined?data[k]:'';
8
9 url +=`&${k}=${encodeURIComponent(value)}`; //地址拼接参数
10
11 }
12 return url ? url.substring(1):''
13 }
2.自己创建个api文件夹,创建一个recomm.js,config  主要用途是处理请求地址url和头部的公共参数,引入刚刚的jsonp.js
代码如下:
  1   import jsonp from '' // jsonp.js文件地址;
2
3 import {commonParams,options} from 'config.js 文件地址' //把congfig.js 对象导入进来
4
5 export function getRemented(){
6
7 const url = '这个是你想要挖掘的地址' ;
8
9 //例如我想要的地址是:https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg
10
11 const data = Object.assign({},commonParams, //这些参数都是可以在network Header 下
12 query string parameters
13       platform:'h5',
14       uin:0,
15       needNewCode:1
16     })
17
18     return jsonp(url,data,options)
19   }
20
21
3. config.js //用途把公共的参数提取出来
代码如下:
  1 export const commonParams = {
2 g_tk:5318,
3 inCharset: 'utf-8',
4 outCharset:'utf-8',
5 notice:0,
6 format:'jsonp'
7 }
8 export const options = {
9 param:'jsonpCallback'
10 }
11 export const ERR_OK = 0;
12
13 //在自己的模块中调用 既可以看到数据
14
15 <template>
16 <div id="app"></div>
17 </template>
18
19 <script type="text/ecmascript-6">
20
21 import{getRemented} from '../../api/recomm'
22
23 import {ERR_OK} from '../../api/config'
24
25 export default{
26 data(){
27 return{}
28 },
29 created(){
30 this._getData();
31 },
32 methods:{
33 _getData (){
34 getRemented ().then((res)=>{
35 if(res.code===ERR_OK){
36 console.log(res.data)
37 }
38 })
39 }
40 }
41 }
42
43 </script>
44
45 <style lang="scss">
46
47 #app {
48
49 font-family: 'Avenir', Helvetica, Arial, sans-serif;
50
51 -webkit-font-smoothing: antialiased;
52
53 -moz-osx-font-smoothing: grayscale;
54
55 text-align: center;
56
57 /*color: #2c3e50;*/
58
59 }
60
61 </style>
62
63
VUE解决axios跨域问题

Vue项目中jsonp抓取数据实现方式的更多相关文章

  1. windows环境下nutch2.x 在eclipse中实现抓取数据存进mysql详细步骤

    nutch2.x 在eclipse中实现抓取数据存进mysql步骤 最近在研究nutch,花了几天时间,也遇到很多问题,最终结果还是成功了,在此记录,并给其他有兴趣的人提供参考,共同进步. 对nutc ...

  2. Vue项目中v-for无法渲染数据

    在Vue项目中,我们想要实现下面的布局效果 后端返回的数据格式如下,可以看出产品列表五张图的数据位于同一个数组中 而我的html结构如下: 我希望直接渲染左边一张大图,然后右边的四张小图通过v-for ...

  3. vue项目中导出PDF的两种方式

    参考大家导出的方式,基本上是如下两种: 1.使用 html2Canvas + jsPDF 导出PDF, 这种方式什么都好,就是下载的pdf太模糊了.对要求好的pdf这种方式真是不行啊! 2.调用浏览器 ...

  4. vue项目中引用echarts的几种方式

    准备工作: 首先我们初始化一个vue项目,执行vue init webpack echart,接着我们进入初始化的项目下.安装echarts, npm install echarts -S //或   ...

  5. vue 项目中使用mock假数据实现前后端分离

    也是查了很多的资料,整理出来.实现了前后端的分离,用到的技术vue-cli,webpack,node,json-server.首先全局安装json-server cnpm i json-server ...

  6. vue项目中返回之前页面数据不刷新的问题

    利用vue做项目的时候会有让用户选择当前页面的某些数据,然后再跳到下一页,而下一页是根据上一页的数据来的,有时候选择了上一页的不同选项,下一页的数据可能还是之前的 这个就属于vue的数据获取问题 解决 ...

  7. php中CURL技术模拟登陆抓取数据实战,抓取某校教务处学生成绩。

    这两天有基友要php中curl抓取教务处成绩的源码,用于微信公众平台的开发.下面笔者只好忍痛割爱了.php中CURL技术模拟登陆抓取数据实战,抓取沈阳工学院教务处学生成绩. 首先,教务处登录需要验证码 ...

  8. 在vue项目中, mock数据

    1. 在根目录下创建 test 目录, 用来存放模拟的 json 数据, 在 test 目录下创建模拟的数据 data.json 文件 2.在build目录下的 dev-server.js的文件作如下 ...

  9. Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据--转

    数据来源:数据挖掘入门与实战  公众号: datadw scrapy_jingdong[9]- 京东爬虫.基于scrapy的京东网站爬虫,保存格式为csv.[9]: https://github.co ...

随机推荐

  1. [翻译] Linux 内核中的位数组和位操作

    目录 Linux 内核里的数据结构 原文链接与说明 Linux 内核中的位数组和位操作 位数组声明 体系结构特定的位操作 通用位操作 链接 Linux 内核里的数据结构 原文链接与说明 https:/ ...

  2. C#语法——事件,逐渐边缘化的大哥。

    事件是C#的基础之一,学好事件对于了解.NET框架大有好处. 事件最常见的比喻就是订阅,即,如果你订阅了我的博客,那么,当我发布新博客的时候,你就会得到通知. 而这个过程就是事件,或者说是事件运行的轨 ...

  3. SLAM+语音机器人DIY系列:(二)ROS入门——6.编写简单的service和client

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  4. C# 创建、更改Excel命名区域(NamedRange)

    创建命名区域是指给选定的某个单元格或多个单元格区域设置名称,目的是方便我们在文件中的其他地方对该单元格区域进行引用能够简化公式引用或者方便数据管理.下面记录了具体的C#示例代码.这里创建命名区域分为了 ...

  5. Java基础-异常、断言

    处理错误 如果Java程序运行期间出现了错误,并且由于出现错误导致某些操作没有完成,程序应该能够返回到一种安全状态,并能够让用户执行一些其他的命令:或者允许用户保存所有操作结果,并以妥善的方式终止程序 ...

  6. MySQL数据库中的四种隔离级别

    事务的隔离性比想象的要复杂,在 SQL 标准中定义了四种级别的隔离级别.通常而言,较低级别的隔离通常可以执行更高的并发,系统的开销也更低 READ UNCOMMITTED 该级别为未提交读.在该级别中 ...

  7. 【修复】当Deepin开机进入BusyBox时修复

    第一次发生这种状况,是因为上一次关机时我直接断电了(并非故意的,我用了deepin一个月出了好几次关机后死机╮(╯▽╰)╭) 参考: 爱之墨色(完美解决)linux 开机进入initramfs无法开机 ...

  8. IM多类型holder封装

    如标题,这是一个在列表多类型视图时的一个简化封装方法,减少多余代码,提高复用性,更好迭代扩展,先看视图列表效果图 GitHub:https://github.com/1024477951/Fragme ...

  9. MyDAL - .UpdateAsync() 之 .SetSegment 根据条件 动态设置 要更新的字段 使用

    索引: 目录索引 一.API 列表 1.SetSegment 属性,指示 根据条件 动态拼接 要修改的字段 见如下示例. 二.API 单表-完整 方法 举例 // update 要赋值的变量 var ...

  10. Postgres 优雅存储树形数据

    碰到一个树形数据需要存储再数据控制,碰到以下两个问题: 在PG数据库中如何表达树形数据 如何有效率的查询以任意节点为Root的子树 测试数据 为了更加简单一些,我们将使用一下数据 Section A ...