前因:项目需要采集N*NNNN组数据。但是该网页是使用AJAX,POST请求获取得到数据的。一般通常GET请求的就用火车头一类的解决的,但是免费版本不能使用ajax获取方式。又懒得写Python(其实是环境没装)。只能靠万能的JS来解决了。
适用人群:会写点小JS,又懒得用Python,想二分钟就搞定的。要是没装油猴子就十分钟吧。。反正超快解决问题。
步骤:
1. 写一段AJAX获取数据。其实不用,页面上就有请求的代码,copy妥妥的
2. 使用油猴子(Tampermonkey)。一个用户脚本管理器插件。安装之后,可自动为您访问的网站添加功能。比如百度网盘破解啦,视频网站去广告破解VIP啦都可以。这里就不赘述了。
直接把post获取数据代码放到油猴子里新建的脚本中
3. 使用FileSaver.js插件实现文件保存功能
油猴子支持引用外部js
@require http://www.jq22.com/demo/FileSaver20161213/FileSaver.min.js
类似这样的。。。
代码中在得到返回数据后保存的代码,类似
var BB = self.Blob;
// csv中列项用逗号分隔,行项用\n分隔,这里只是意思意思,实际一般是在post请求后得到返回的list数据后循环赋值。
var str=result.rows[i].timeHour + ","+result.rows[i].uuid+","+result.rows[i].customerId+","+result.rows[i].ip+ ","+result.rows[i].pageUrl + "\n";
// 使用 Blob 和FileSaver保存CSV文件。
saveAs( new BB( ["\ufeff" + str], {type: 'text/csv;charset=utf8'} ) , "demo.csv" );
结果:基本上在油猴子上运行后,就能得到1个或者多个csv文件了。
谁说js不能导出文件的,嘿嘿嘿。
由于实际采集一个小小的栗子:
// @name 获得天天果园某个商品评论
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @match http://www.fruitday.com/prodetail/index/16987
// @grant none
// @require http://www.jq22.com/demo/FileSaver20161213/FileSaver.min.js
// ==/UserScript==
/* jshint -W097 */
'use strict';
// Your code here...
var curr_page=0;
var str="";
var getComment = function(cpage){
$.post('http://www.fruitday.com/ajax/comment/pList',{id:16987,curr_page:cpage,type:""},
function(result)
{
result=JSON.parse(result);
var rlist=result.msg.list;
for(var i=0;i
var rlist=result.msg.list;
for(var i=0;i<=rlist.length;i++){
str+= rlist[i].id+ ","+ rlist[i].content+","+ rlist[i].time+ ","+ rlist[i].star + "\n";
}
curr_page++;
if( curr_page==200){
$('body').html(str);
var BB = self.Blob;
saveAs( new BB( ["\ufeff" + str], {type: 'text/csv;charset=utf8'} ) , "天天果园评论demo.csv" );
}else{
getComment(curr_page);
}
}
)
};
$(function(){
$('body').html("正在进行中....");
getComment(curr_page);
})
获取的就是天天果园某个商品的评论,大概2000千吧。
到了excel就可以做点小小小小的分析了。