node.js爬虫 保存数据为json、mysql、mongodb 虎牙、斗鱼、熊猫、全民、龙珠 在线直播间抓取
来源:互联网 发布:九品网络电视安卓9ptv 编辑:程序博客网 时间:2024/06/10 03:55
node.js爬虫
github源代码
首先介绍一下我引用的包
require(“request”); –get post请求页面
require(“cheerio”) –解析文本对象为DOM对象 也就是说将string 装换为 js操作的 $() 这种选择器
require(‘fs’); – 将数据保存json格式
require(“async”) –流程控制 主要是控制抓取时间间隔
require(‘sequelize’); –保存到数据库用的
require(‘log4js’) –log日志管理
这张图片是项目目录
./bin 日志配置
./logs 日志目录
,/model mongodb 实体
./output json输出目录
index.js 启动项 node.exe index.js
douyu.js 抓取斗鱼
接下来介绍思路:
第一步 分析页面(找到在线直播的url)
第二步 使用require 请求页面 获取html文档
第三步 使用cheerio 分析页面
第四步 保存数据到 json.js 文档 mysql mongodb
介绍代码
外层
我们看一下 douyu.js
var request = require("request");//文档分析var cheerio = require("cheerio");var fs = require('fs');//日志var logger = require("./bin/logHelper").helper;//流程控制var async = require("async");//数据库访问var Sequelize = require('sequelize');var data_db= new Sequelize( "UserInfo", "sa", "pass1234",{ dialect:'mssql', host:'127.0.0.1', port:1433 });//mongodb访问var _mongodb = require('./model/mongodb');
流程控制 async
//流程控制 async async.waterfall([ function(cb){ //获取总页数,直接get请求 request('https://www.douyu.com/directory/all', function (error, response, body) { //获取总页数 if (!error && response.statusCode == 200) { var $ = cheerio.load(body, { normalizeWhitespace: true, decodeEntities: false }); var num = $(".classify_li a").eq(0).attr("data-pagecount"); cb(null,num); } }) }, function(num,cb){ var opts = []; for (var i = 1; i <num; i++) { opts.push({ method: 'GET', url: url, qs: {page: i, isAjax: 1} }); } //2秒抓一次 // async.eachSeries(opts,function (opt, callback) { // setTimeout(function(){ // fetchPage(opt, (err) => {callback()}); // }, 2000); // } // ); //控制最大并发数为5, async.forEachLimit(opts,5,function (opt, callback) { setTimeout(function(){ fetchPage(opt, (err) => {callback()}); }, 2000); },function (err) { if (err) { logger.writeErr(err); cb(err); } else { logger.writeInfo("douyu抓取结束"); console.log("douyu抓取结束"); cb(); } } ); } ]);
分析页面
function fetchPage(opt, cb) { console.log("抓取第" + opt.qs.page+"页"); request(opt, function (error, response, body) { if (error) { return; } var $ = cheerio.load(body, { normalizeWhitespace: true, decodeEntities: false }); var items = []; var itemsstr = []; logger.writeInfo("抓取第" + opt.qs.page+"页"); $("li").each(function (index, el) { var dyNum =$(el).find('.dy-num.fr').text(); if(dyNum.indexOf('万')>=0){ dyNum =Number(dyNum.replace('万',''))*10000; } var item = { userid: $(el).find('a.play-list-link').attr("data-rid"), userName: $(el).find('.dy-name.ellipsis.fl').text(), tag: $(el).find('.tag.ellipsis').text(), dyNum: dyNum, title:$(el).find('a.play-list-link').attr("title"), url:"https://www.douyu.com"+$(el).find('a.play-list-link').attr("href") }; items.push(item); }); // var sql="INSERT INTO [dbo].[douyu]([userid],[userName],[tag],[dyNum] ,[title],[url],[SpideTiem]) VALUES " ; // for(var vue of items){ // itemsstr.push("('"+vue.userid+"','"+vue.userName+"','"+vue.tag+"','"+vue.dyNum+"','"+vue.title+"','"+vue.url+"',GETDATE())") // } if(items.length>0) { //插入mssql // data_db.query(sql+itemsstr.toString()).then(function (q) { // console.log("插入第" + opt.qs.page+"页"); // cb(); // }); //json格式 // fs.writeFile('output/output'+opt.qs.page+'.json', JSON.stringify(items, null, 2), function (err) { // console.log("插入第" + opt.qs.page+"页"); // cb(); // });//使用mongoDB保存 // _mongodb.douyuModel.collection.insert(items,function(err){ // if(err){ // console.log(err); // }else{ // console.log("插入第" + opt.qs.page+"页"); // cb(); // } // }) } });}
接下来就是数据分析和echarts数据展示了,还没弄额
可以直接到github源代码
下载代码或者加qq群一起交流:315552185
0 0
- node.js爬虫 保存数据为json、mysql、mongodb 虎牙、斗鱼、熊猫、全民、龙珠 在线直播间抓取
- 游戏直播哪家强?虎牙、斗鱼、熊猫三强App大PK
- 游戏直播哪家强?虎牙、斗鱼、熊猫三强App大PK
- 爬虫 斗鱼 直播
- node.js 小爬虫抓取网页数据
- 抓取斗鱼直播弹幕
- 斗鱼直播与熊猫直播竞品分析
- node.js 小爬虫抓取网页数据(2)
- 玩转【斗鱼直播APP】系列之利用青花瓷抓取数据
- 小码哥-玩转【斗鱼直播APP】系列之利用青花瓷抓取数据
- 斗鱼直播实时数据爬取
- Python+爬虫技术获取斗鱼直播图片(整理)
- Node.js学习之网络爬虫(使用cheerio抓取网页数据)
- python爬虫----简单的抓取斗鱼弹幕
- 直播网站LiveTV Mining,爬虫抓取数据 python3+selenium+phantomjs
- node.js-mongodb插入数据
- 网络爬虫之php抓取json,xml,js,html示例分析及数据解析
- java连接mysql获取数据保存为json格式
- 【转载】[Poj 2187]计算几何之凸包(三) {旋转卡壳初步}
- 深度学习 deep learning 深度学习框架 caffe 深入学习过程(一)
- Eclipse快捷键积累
- SetWindowText函数(详解)
- [安卓基础]学习第六天
- node.js爬虫 保存数据为json、mysql、mongodb 虎牙、斗鱼、熊猫、全民、龙珠 在线直播间抓取
- 错误 Angular2 Can't bind to 'routerLink' since it isn't a known property of 'a'
- 腾讯安全反病毒实验室解读“Wannacry”勒索软件
- [bzoj] 1011: [HNOI2008]遥远的行星
- 最长回文串——Manacher模板
- 树莓派镜像备份与恢复文章
- 心迹
- vim调试器gdbmgr的安装介绍
- WM_SHOWWINDOW消息(详解)