闲来无事爬了下通讯录 试手 jsdom
curl http://xxx.com/address/addresslist\?search\=%40 --cookie oa_cookie=123 -s| node parss
.js
js 代码
var jsdom = require('jsdom')
,fs = require('fs')
process.stdin.setEncoding('utf8');
var html = ''
process.stdin.on('readable', function() {
var chunk = process.stdin.read();
if (chunk !== null) html += chunk
});
var userlist = require('./userlist.json')
,userHash = JSON.parse(JSON.stringify(userlist) )
process.stdin.on('end', function() {
process.stdout.write('\n');
jsdom.env(html,
function (errors, window) {
var list = []
var l = window.document.querySelectorAll('#userlist tr')
for (var i = ; i < l.length ;i ++ ){
var li = l[i].getElementsByTagName('td')
if (!li || li.length < ) continue
var user_id = li[].textContent
var user = {
"name" : li[].textContent
, "dep" : li[].textContent
, "email" : li[].textContent
, "phone" : li[].textContent
, "qq" : li[].textContent.trim()
}
if (user_id in userlist ) {
delete userHash[user_id]
continue
}
user.join = +new Date()
userlist[user_id] = user
process.stdout.write('\n 入职:' + JSON.stringify(user))
}
var quits = JSON.stringify(userHash)
if ('{}' != quits) {
var leaves = quires('./leaves.json')
for (var id in userHash){
leaves[id] = userHash[id]
}
fs.writeFile('./leaves.json' , JSON.stringify(leaves ,null , ) )
process.stdout.write('\n 离职:' + quits)
}
fs.writeFile('./userlist.json' , JSON.stringify(userlist ,null , ) )
process.stdout.write('\nend');
}
)
})
jsdom 官网 https://github.com/tmpvar/jsdom
闲来无事爬了下通讯录 试手 jsdom的更多相关文章
- HDU——1303Doubles(水题,试手二分查找)
Doubles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- Iphone 英语语言下通讯录排序问题
Iphone 如果把界面语言设置成English,那么通讯录默认排序是通过拼音来排的,如果联系人信息中没有设置名字的拼音,那么这些联系人都会被放到#中. 批量添加拼音的解决方案: https://gi ...
- .NET跨平台:在mac命令行下用vim手写ASP.NET 5 MVC程序
昨天在 Mac 上手写了一个最简单的 ASP.NET 5 程序,直接在 Startup.cs 中通过 Response.WriteAsync() 输出响应内容,详见 .NET跨平台:在Mac上跟着错误 ...
- 写了个TP5下PHP和手机端通信的API接口校验
写了个PHP和手机端通信的API接口校验 直接发函数吧 public function _initialize() { //定义密码和盐 $password="123456"; $ ...
- Hadoop入门第三篇-MapReduce试手以及MR工作机制
MapReduce几个小应用 上篇文章已经介绍了怎么去写一个简单的MR并且将其跑起来,学习一个东西动手还是很有必要的,接下来我们就举几个小demo来体验一下跑起来的快感. demo链接请参照附件:ht ...
- linux下測试硬盘读写速度
买了个ssd硬盘,就想着跟普通的机械盘做个比較.由于桌面装的是ubuntu系统,所以就想用linux的命令简单測一下好了 以下是ssd的性能数据: 測试写: xxx@WaitFish:~ > t ...
- baiduMap试手《办理进京证和市区警察查询进京证的地址浏览》
没用过baidu的map api其实挺简单,申请一个key,然后根据坐标在地图上生成对象,看了官方的dome多少知道有些什么功能了,没什么可说的直接贴效果. <!DOCTYPE html> ...
- 【插件篇】前段bootstrap-table-treegrid试手,解决无法显示树形列表或者图标不显示问题。
说明:具体代码操作我就不贴了.官方有正规的例子!bootstrap-table-examples传送 使用注意事项: 传入的id和pid可以是string类型的(我后台返回的是Long类型转换成str ...
- 浅学JSON——Json.NET之首次试手
首次遭遇Json格式,缘由项目中用到Json数据,需要进行解析,为此,将Json数据转为了自己较为熟悉的DataTable格式,以此展示至DataGridView中,验证是否成功. 直接上代码: // ...
随机推荐
- C语言实现使用动态数组实现循环队列
我在上一篇博客<C语言实现使用静态数组实现循环队列>中实现了使用静态数组来模拟队列的操作. 因为数组的大小已经被指定.无法动态的扩展. 所以在这篇博客中,我换成动态数组来实现. 动态数组能 ...
- Oracle Hint的用法
1. /*+ALL_ROWS*/ 表明对语句块选择基于开销的优化方法,并获得最佳吞吐量,使资源消耗最小化. 例如: SELECT /*+ALL+_ROWS*/ EMP_NO,EMP_NAM,DAT_I ...
- Qt-信号和槽-多对多
前言:介绍1对多,多对1以及多对多的案例. 一.1对多 演示内容:在QLineEdit输入时,同步label,text browser以及调试输出板同步显示. 1.1 新建工程 1.2 添加部件 拖入 ...
- Unity3D基础
鼠标事件: OnMouseEnter():鼠标进入 OnMouseExit():鼠标移出 OnMouseDown():鼠标点击 OnMouseUp():鼠标抬起 static GameObject I ...
- 软件测试作业-selenium
一.作业要求 1.安装SeleniumIDE插件. 2.学会使用SeleniumIDE录制脚本和导出脚本. 3.访问网址使用学号登录系统,进入系统后可以看到该同学的git地址. 4.编写Seleniu ...
- jQuery应用实例2:简单动画
效果: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...
- Ubuntu 16.04 Go环境搭建 Go环境+Sublime配置
Ubuntu 16.04 Go环境搭建 Go环境+Sublime配置 1. 安装Go 下载地址https://golang.org/dl/ (需要翻下) 下载到类似go1.8.3.linux-amd6 ...
- 初学C#,总结一下.sln和.csproj的区别
1.sln:solusion 解决方案 csproj:c sharp project C#项目 csproj文件大家应该不会陌生,那就是C#项目文件的扩展名,它是“C Sharp Project”的缩 ...
- Springboot use tomcat JNDI
Springboot use tomcat JNDI [use database pool : dbcp Druid bonecp C3P0 proxool] [1]apache-tomcat-9. ...
- solarwinds之监控路由器
配置路由器开启SNMP功能 1. 开启路由器的SNMP功能,并指定两个共同体名 网络扫描 1. 添加一个新扫描 2. 默认下一步 ...