用nodejs 抓取阿里巴巴企业联系人数据 并导入微信
发布于 11 年前 作者 osmen 7281 次浏览 最后一次编辑是 8 年前

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

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

之前我们的数据挖掘时采用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

pageNum 对应的就是分页号 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;

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

3 回复

顶一下,这个很有商业价值啊,方向向征信体系靠,潜力无穷。 刚试了一下: 安装方式挺怪的,如果2步并作1步就好了。还有不是插件里有个main.html么,直接搜索更好。 现在其实是一个定向搜索,但征信体系是多维度的,把数据从一个地方搬到另一个地方还没有产生价值,如果做关联数据分析就有意思了。 举例来说,一个企业的法人和实际控制人,到底哪个才是拍板的?就不好搞了,因为一般这样的调查行为,都需要跟有话语权的人沟通。

总的来说:很不错,明年打算也做定向搜索,跟你们业务不冲突,放心。现在还在技术选型,对Node扬长避短,让node只做层“皮”,做IO型模块,希望能相互交流下技术。

插件主要是在前台划词查询比较方便,main.html,只是通过搜索查询, 呵呵 数据关联是最复杂的了,我们也正在做这个工作,我们库中现在有几千万数据了,并每天以3万的数据持续更新,与原库进行数据挂接,机器每天24小时在不停的计算。 兄台如有合作方向,可随时联系。

有邮箱或者QQ吗,在下也是做抓取的,,交流下经验 QQ:70190948

回到顶部