用nodejs 抓取阿里巴巴企业联系人数据 并导入微信
发布在Node.js 常用模块详解2013年12月31日view:10403
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

做互联网的都知道进来使用微信营销的威力,我们公司是一个初创团队,主要服务是做大数据处理,短时间想通过微信来推广。

条件一就是必须拿到用户的手机号,然后把手机号加入到通讯录,这样就可以加微信了,我们的目标用户是中小企业,于是就选了阿里巴巴作为数据的来源。

之前我们的数据挖掘时采用python,对于nodejs迷,怎么能放过呢。好了废话就不说了,开始我们的node数据挖掘之路,小伙伴们 Let Go!

数据分析 首先打开阿里巴巴的企业列表页 http://daili.1688.com/daili/list.htm?spm=a268e.6875057.1996408053.60 打开chrome调试工具发现他的数据加载时ajax加载的

分页时会请求这个地址 http://daili.1688.com/daili/ajax.json?action=list/list_action&event_submit_doQueryFromList=true&pageNum=1&pageSize=15&stdcategoryid1=7&_=1388471385082

pageNu 对应的就是分页号 *stdcategoryid1 对应的就是分页号 是行业分类*

如 13:建材 58:照明工业 59:五金工具 18:户外运动 7:数码、电脑 返回的json结构如下 { "count": 373, "data": [ {这里就是我们需要的数据},{},……] "isSuccess": true, "success": "true" }

好了知道数据结构了 该我们nodeJS 大神 上场了,伙伴们拿好小板凳观战;

主要用到的模块 jquery ,jsdom nodegrass nodegrass git://github.com/scottkiss/nodegrass.git

核心代码

新建一个getdata.js 抓取动作

function getHtml(pageid,cid){

 var url = 'http://daili.1688.com/daili/ajax.json?action=list/list_action&event_submit_doQueryFromList=true&pageNum='+pageid+'&pageSize=15&stdcategoryid1='+cid+'&_=1388454529278'

 // var url = 'http://xtzy.chinacourt.org/'+pageid

 nodegrass.get(url,function(data,status,headers){


  alibabaToDb(data);

  return

 },'utf-8').on('error', function(e) {

     console.log("Got error: " + e.message);

 });

}

//数据提取 阿里巴巴 规则

function alibabaToDb(data){

 var list = eval('('+data+')');

 $.each(list.data, function(index, val) {

  console.log(val.tel);

  var value=[];

   value['companyname']= val.companyname;

   value['companyintroduction']= val.companyintroduction;

   value['stdcategoryid1']= val.stdcategoryid1;

   value['tel']= val.tel;

   value['winportdomain']= val.winportdomain;

   value['brandlogourl']= val.brandlogourl;

   value['createdTime']= timestamp();

   // console.log(value);

   sqlInsert('enterprise',value);

 });

}

// 向数据库插入一条或多条数据的标准方法

function sqlInsert(table,fields){

 var field='';

 var val = '';

    for(key in fields){

     field += key+',';



      val += '"'+fields[key]+'",';

   // console.log(key);

  }

 field = field.substring(0, field.length-1) 

 val = val.substring(0, val.length-1)

 var sql = 'INSERT INTO '+ table +'('+ field +') VALUES('+ val+')';

 // console.log(sql);

 connection.query(sql, function(err,res,fields){

  if(err){

   return null

  }

  // console.log(res); 

  return res;

  connection.end(); 

  } 

 ); 

}

执行 node getdata.js 几秒之内数据就啪啪进库了。感觉比python快多了; 感兴趣的同学可以看下我们的产品商战雷达tech.bss360.com; 目前我们的爬虫基本实现了分布式,自动化抓取任务了。主程序是python写的,这个只是玩玩,以后考虑转移到node;

下次再讲下怎么转移到微信

评论
发表评论
暂无评论
WRITTEN BY
PUBLISHED IN
Node.js 常用模块详解

这是一个开放专栏,任何人都可以投稿,不过比较正式,所以对文章的要求比较高。

暂时计划讲解一下模块:

基础/管理 类别

  • express
  • connect

工具 类别

  • underscore
  • async
  • moment (创作中)
  • request
  • grunt
  • uglify-js
  • cheerio
  • forever
  • nodemon

数据库/网络 类别

  • mysql
  • sequelize
  • mongoose
  • socket.io
  • redis

    加强/模板 类别

  • coffee-script

  • jade
  • less
  • -

图像 系列

  • gm
  • canvas
  • phantomjs

保留修改意见,欢迎在此专栏发表常用模块教程。

对此专栏文章的版权,我们在此强烈地强调,谢绝商业性质的转载和引用,本系列可能会集结成书,所以禁止任何商业转载

友情链接 大搜车前端团队博客
我的收藏