为啥用这个爬数据?py 不香吗?
回答:简单,js 方便在页面上验证,不用转换。
Tips : bulldozer-c已打包,使用时只需要集成即可。
项目结构如下: 工程地址
├─ config # 配置信息:定义 ip、port
├─ node_modules # 利用npm管理的所有包及其依赖
├─ lib # 库:封装的一些工具
├─ example # 栗子:存放脚本等,也可以是别的名字
├─ package.json # npm的配置文件:脚本、依赖等
├─ package-lock.json # npm的配置文件:脚本、依赖等
└─ index.js # 工程入口:具体实现
客户端这块主要功能是:请求、解析、抓取。
先跑起来
工程 clone下来: 项目地址
工程基于 npm:mac下可使用 brew install npm进行安装。
依赖下载,直接运行:npm install。
运行的话是直接执行脚本:node crawl_contact_info/init_list.js
这样就算 OK 了。
一些问题
- 参数什么含义?如何使用?
handlerContext = bc.httpUtils.buildHttpcontext('GET', {
'next': 'info', // HTTP 请求完后,下一动作
'url': link
}, undefined, null);
// postdata: undefined, HTTP 请求的数据?
// timeout: null,HTTP 超时时间?
- 如何参数传递?
// 可以如下使用:
crawl.on('list', function (handlerContext) {
let body = handlerContext.response.body;
let data = handlerContext.data; // 上一个请求带过来的数据
handlerContext = bc.httpUtils.buildHttpcontext('GET', {
'next': 'info',
'url': link,
'category': data.category // 重点
});
}
- 整体调度参数如何使用?
bc.taskInit(); // 只初始化一次
// bc.setTaskInitInterval(20, 0.1); // 定时执行,这个跟上面存在一个即可。
bc.runTask({'name': TASK_NAME}, crawl, TASK_NAME, 5, bc.spop, 1000);
// Tips:TASK_NAME
- 打通后,调度流程是怎样?
客户端启动后,BulldozerC会定时调度,会从 redis 中拿取任务。
- 有点不好测试
- 要批量测试有点麻烦了:以及联动测试麻烦
- 数据聚合只能顺序调用
举个🌰:要聚合两个页面数据,只能一个个处理,一个嵌套一个再处理。
- 元素定位出错,错误处理怎样?
目前:出错了,抛异常,再扔到队列中,等下次重试。
所以,一些无关紧要的实际上可以直接忽略。
token、cookie只能手动添加?不能自动?
目前只能手动。
ORM:此框架支持字段自动映射嘛?
不支持。
举个🌰:数据字段 mainProducts,数据库字段 main_products,不会自动映射。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情