爬虫的话 无非就两个步奏 获取数据 和 请求数据
在node中 可直接使用http模块的http.get写入就用的mysql 方便简单
我就把目光转向了国内某弹幕网站的用户数据
这里直接f12抓到了api由于此网站备案被吊销 主站地址为国外的反带 这里直接替换为国内域名 并格式化返回的json
link
{
"userjson": {
"currExp": 1425,
"stows": 3413,
"comments": 309,
"gender": 1,
"level": 8,
"sign": "高冷如我",
"follows": 24,
"lastLoginDate": "2016-11-01 14:31:31.0",
"avatar": "http://cdn.aixifan.com/dotnet/artemis/u/cms/www/201609/19213511bt8gmp0l.jpg",
"posts": 9,
"followed": 0,
"lastLoginIp": "60.214.115.*",
"fans": 2,
"uid": 1292455,
"regTime": "2015-04-25 22:11:49.0",
"nextLevelNeed": 1700,
"name": "疯狂减肥带",
"dTime": "",
"expPercent": 8,
"isFriend": 0,
"views": 61065
},
"success": true}
json一目了然 至于success可以做判定用户是否获取成功使用
var web='
var start=0
http.get(web+start, function(res) {
var jsonx=''
res.on('data', function(data) {
jsonx+=data
})
res.on('end',function(){
jsony=JSON.parse(jsonx);
if (jsony.success) {
//成功执行的操作
}
else{
console.log('eero user not found')
}
}).on('error', function(e) {
console.error(e);
console.log('eero web server not found')
})
http.get请求就此完成
写入数据库使用的mysql库 使用前需要使用npm安装
按照官方介绍 链接数据库
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '',
database : 'acfun'//数据库名
});
connection.connect();
在执行成功的地方 执行数据库命令
var acfunuser=jsony.userjson;//这里直接把json的userjson赋值 方便直接调用
//数据库添加命令 其中INSERT INTO `acfun`.`user` 中的acfun为数据库名 user为表名
connection.query("INSERT INTO `acfun`.`user` (`uid`, `name`, `level`, `currExp`, `sign`, `posts`, `comments`, `follows`, `fans`, `lastLoginDate`, `regTime`, `comeFrom`, `views`) VALUES ("+acfunuser.uid+",'"+acfunuser.name+"',"+ acfunuser.level+","+ acfunuser.currExp+",'"+ acfunuser.sign+"',"+acfunuser.posts+", "+acfunuser.comments+","+acfunuser.follows+","+acfunuser.fans+",'"+acfunuser.lastLoginDate+"','"+acfunuser.regTime+"','"+acfunuser.comeFrom+"',"+ acfunuser.views+")", function(err, rows, fields) {
console.log('uid: '+acfunuser.uid+' mysql write success')
//这里为了执行过程中发生数据库无法写入(一般是有重复值)导致程序报错就注释掉了
//if (err) throw err;
这样还只是爬去单个用户数据
只要用setInterval(getjson,10)重复执行就可以了 并在执行完毕后使start自增加 start++就可以了
完整代码