用Nodejs抓取阿里巴巴企业联系人数据并导入微信
用Nodejs抓取阿里巴巴企业联系人数据并导入微信
做互联网的都知道进来使用微信营销的威力,我们公司是一个初创团队,主要服务是做大数据处理,短时间想通过微信来推广。
条件一就是必须拿到用户的手机号,然后把手机号加入到通讯录,这样就可以加微信了,我们的目标用户是中小企业,于是就选了阿里巴巴作为数据的来源。
之前我们的数据挖掘时采用python,对于nodejs迷,怎么能放过呢。好了废话就不说了,开始我们的node数据挖掘之路,小伙伴们 Let Go!
数据分析 首先打开阿里巴巴的企业列表页 http://daili.1688.com/daili/list.htm?spm=a268e.6875057.1996408053.60 打开chrome调试工具发现他的数据加载时ajax加载的
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://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;
下次再讲下怎么转移到微信
用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&event_submit_doQueryFromList=true&pageNum=1&pageSize=15&stdcategoryid1=7&_=1388471385082">http://daili.1688.com/daili/ajax.json?action=list/list_action&event_submit_doQueryFromList=true&pageNum=1&pageSize=15&stdcategoryid1=7&_=1388471385082</a>
其中,pageNum
对应的是分页号,stdcategoryid1
对应的是行业分类(例如:13:建材, 58:照明工业, 59:五金工具, 18:户外运动, 7:数码、电脑)。
返回的JSON结构如下:
{
"count": 373,
"data": [
{ ... },
{ ... },
...
],
"isSuccess": true,
"success": "true"
}
NodeJS 实现
接下来,我们将使用NodeJS来实现数据抓取。主要使用的模块包括 nodegrass
和 jquery
。
安装依赖
首先安装所需的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 添加好友或通讯录。你可以考虑以下方案:
- 使用企业微信 API:企业微信提供了更开放的 API 接口,可以通过这些接口进行批量导入或发送消息。
- 手动操作:如果你的数据量不大,可以先将数据导出到 Excel 或 CSV 文件,然后手动导入到微信中。
示例:使用企业微信 API 导入数据
- 注册企业微信:注册并获取企业 ID 和应用凭证。
- 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 文档和规则,以避免违反其使用政策。