用Nodejs抓取阿里巴巴企业联系人数据并导入微信

用Nodejs抓取阿里巴巴企业联系人数据并导入微信

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

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

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

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


5 回复

用Nodejs抓取阿里巴巴企业联系人数据并导入微信

引言

做互联网的都知道,现在使用微信进行营销的威力巨大。我们是一家初创团队,专注于大数据处理,并希望通过微信来进行快速推广。为了实现这一目标,我们需要获取用户的手机号并将其添加到通讯录中。我们的目标用户群体是中小企业,因此选择了阿里巴巴作为数据源。

数据分析

首先,我们访问阿里巴巴的企业列表页面:

<a href="http://daili.1688.com/daili/list.htm?spm=a268e.6875057.1996408053.60">http://daili.1688.com/daili/list.htm?spm=a268e.6875057.1996408053.60</a>

通过Chrome开发者工具,我们发现数据是通过AJAX异步加载的。分页时会请求以下地址:

<a href="http://daili.1688.com/daili/ajax.json?action=list/list_action&amp;event_submit_doQueryFromList=true&amp;pageNum=1&amp;pageSize=15&amp;stdcategoryid1=7&amp;_=1388471385082">http://daili.1688.com/daili/ajax.json?action=list/list_action&amp;event_submit_doQueryFromList=true&amp;pageNum=1&amp;pageSize=15&amp;stdcategoryid1=7&amp;_=1388471385082</a>

其中,pageNum 对应的是分页号,stdcategoryid1 对应的是行业分类(例如:13:建材, 58:照明工业, 59:五金工具, 18:户外运动, 7:数码、电脑)。

返回的JSON结构如下:

{
  "count": 373,
  "data": [
    { ... },
    { ... },
    ...
  ],
  "isSuccess": true,
  "success": "true"
}

NodeJS 实现

接下来,我们将使用NodeJS来实现数据抓取。主要使用的模块包括 nodegrassjquery

安装依赖

首先安装所需的NodeJS模块:

npm install nodegrass jquery
核心代码

新建一个文件 getdata.js

const nodegrass = require('nodegrass');
const $ = require('jquery');

// 抓取数据
function getHtml(pageid, cid) {
  const url = `http://daili.1688.com/daili/ajax.json?action=list/list_action&event_submit_doQueryFromList=true&pageNum=${pageid}&pageSize=15&stdcategoryid1=${cid}&_=1388454529278`;

  nodegrass.get(url, (data, status, headers) => {
    alibabaToDb(data);
  }, 'utf-8')
  .on('error', (e) => {
    console.log(`Got error: ${e.message}`);
  });
}

// 数据提取规则
function alibabaToDb(data) {
  const list = JSON.parse(data);

  list.data.forEach((val) => {
    console.log(val.tel);

    const value = {
      companyname: val.companyname,
      companyintroduction: val.companyintroduction,
      stdcategoryid1: val.stdcategoryid1,
      tel: val.tel,
      winportdomain: val.winportdomain,
      brandlogourl: val.brandlogourl,
      createdTime: new Date().toISOString()
    };

    sqlInsert('enterprise', value);
  });
}

// 向数据库插入数据
function sqlInsert(table, fields) {
  let field = '';
  let val = '';

  for (let key in fields) {
    field += `${key},`;
    val += `"${fields[key]}",`;
  }

  field = field.slice(0, -1);
  val = val.slice(0, -1);

  const sql = `INSERT INTO ${table} (${field}) VALUES (${val})`;

  // 这里假设你已经连接到数据库
  // connection.query(sql, (err, res, fields) => {
  //   if (err) {
  //     return null;
  //   }
  //   return res;
  // });
}

// 执行抓取
getHtml(1, 7);

结语

以上代码展示了如何使用NodeJS抓取阿里巴巴的企业联系人数据并插入到数据库中。下一步我们将讨论如何将这些数据导入到微信中。感兴趣的同学可以查看我们的产品 商战雷达,目前我们的爬虫已经实现了分布式和自动化抓取任务。


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

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

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

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

要实现从阿里巴巴抓取企业联系人数据,并将其导入微信,我们可以分为两步:首先通过 Node.js 抓取数据,然后将数据导入微信。由于直接导入微信涉及隐私和安全性问题,通常需要使用微信的开放平台 API 来实现间接操作。

抓取数据

我们已经有一个基本的抓取逻辑,现在补充完整:

安装依赖

npm install nodegrass jquery jsdom

抓取数据的完整代码

const nodegrass = require('nodegrass');
const $ = require('jquery');
const jsdom = require('jsdom');
const { JSDOM } = jsdom;

// 假设数据库连接已定义
const connection = /* 你的数据库连接 */;

function getHtml(pageid, cid) {
    const url = `http://daili.1688.com/daili/ajax.json?action=list/list_action&event_submit_doQueryFromList=true&pageNum=${pageid}&pageSize=15&stdcategoryid1=${cid}&_=1388454529278`;

    nodegrass.get(url, (data, status, headers) => {
        alibabaToDb(JSON.parse(data));
    }, 'utf-8').on('error', (e) => {
        console.log("Got error: " + e.message);
    });
}

function alibabaToDb(data) {
    data.data.forEach((val) => {
        console.log(val.tel);
        const value = {
            companyname: val.companyname,
            companyintroduction: val.companyintroduction,
            stdcategoryid1: val.stdcategoryid1,
            tel: val.tel,
            winportdomain: val.winportdomain,
            brandlogourl: val.brandlogourl,
            createdTime: Date.now()
        };
        sqlInsert('enterprise', value);
    });
}

function sqlInsert(table, fields) {
    let field = '';
    let val = '';
    for (let key in fields) {
        field += `${key},`;
        val += `"${fields[key]}",`;
    }
    field = field.slice(0, -1);
    val = val.slice(0, -1);

    const sql = `INSERT INTO ${table}(${field}) VALUES(${val})`;
    connection.query(sql, (err, res, fields) => {
        if (err) {
            return null;
        }
        console.log(res);
        connection.end();
    });
}

// 执行抓取
getHtml(1, 7); // 抓取第一页的行业分类为7(数码、电脑)的数据

将数据导入微信

由于微信的 API 涉及复杂的认证和安全机制,我们不能直接通过 API 添加好友或通讯录。你可以考虑以下方案:

  1. 使用企业微信 API:企业微信提供了更开放的 API 接口,可以通过这些接口进行批量导入或发送消息。
  2. 手动操作:如果你的数据量不大,可以先将数据导出到 Excel 或 CSV 文件,然后手动导入到微信中。

示例:使用企业微信 API 导入数据

  1. 注册企业微信:注册并获取企业 ID 和应用凭证。
  2. API 调用:使用企业微信提供的 API 进行数据导入。
const axios = require('axios');
const crypto = require('crypto');

// 假设获取到的 access_token
const accessToken = 'your_access_token_here';

// 获取公司信息
async function getCompanyInfo(companyName) {
    const response = await axios.get(`https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token=${accessToken}`);
    return response.data.department;
}

// 添加成员
async function addMember(memberData) {
    const response = await axios.post(`https://qyapi.weixin.qq.com/cgi-bin/user/create?access_token=${accessToken}`, memberData);
    return response.data;
}

// 使用示例
const memberData = {
    userid: 'unique_id',
    name: '公司名称',
    mobile: '电话号码',
    department: [1], // 部门ID
};

addMember(memberData).then(console.log).catch(console.error);

请确保遵循企业微信的 API 文档和规则,以避免违反其使用政策。

回到顶部