以下代码爬取豆瓣电影网的数据并且写入数据库
首先安装cheerio和mysql
npm i cheerio -s
npm i mysql -s
// 加载http模块
var https = require('https');
// Cheerio 是一个Node.js的库, 它可以从html的片断中构建DOM结构,然后提供像jquery一样的css选择器查询
var cheerio = require('cheerio');
// 数据库初始化
//连接数据库
var mysql = require('mysql');
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '123456',
database: 'nodejs'
});
connection.connect();
// 定义网络爬虫的目标地址:豆瓣电影的现在热映
var url = 'https://movie.douban.com/cinema/nowplaying/chongqing/';
//开始获取目标地址数据
https.get(url, function(res) {
var html = '';
// 获取页面数据
res.on('data', function(data) {
html += data;
});
// 数据获取结束
res.on('end', function() {
// 通过过滤页面信息获取实际需求的信息
filterMovieInfo(html);
});
}).on('error', function() {
console.log('获取数据出错!');
});
/* 过滤页面信息 */
function filterMovieInfo(html) {
if (html) {
// 沿用JQuery风格,定义$
var $ = cheerio.load(html);
// 根据id获取轮播图列表信息
var slideList = $('.lists');
/* 轮播图列表信息遍历 */
slideList.children('li').each(function(item) {
var pic = $(this);
// 找到a标签并获取href属性
var pic_href = pic.find('.poster').children('a').attr('href');
// 找到a标签的子标签img并获取_src
var pic_src = pic.find('.poster').children('a').find('img').attr('src');
// 找到a标签的子标签img并获取alt
var pic_message = pic.find('.poster').children('a').find('img').attr('alt');
// 向数组插入数据
var data = {
pic_href : pic_href,
pic_message : pic_message,
pic_src : pic_src,
}
//调用getInfo(),通过pic_href获取电影详情页的数据
getInfo(pic_href,data);
});
} else {
console.log('无数据传入!');
}
}
//通过爬到的链接pic_href,再去爬取电影详情页的影片简介
function getInfo(url,json){
https.get(url, function(res) {
var html = '';
// 获取页面数据
res.on('data', function(data) {
html += data;
});
// 数据获取结束
res.on('end', function() {
if (html) {
// 沿用JQuery风格,定义$
var $ = cheerio.load(html);
//获取到页面上的电影简介
var string = $('#link-report').text();
//未替换\n和空格会导致无法写进数据库
string = string.replace(/\n/g,"");
string = string.replace(/\s/g,"");
//写入数据库
var addSql = 'INSERT INTO doubanmovie(moviename,movieinfo,movieimg) VALUES(?,?,?)';
var addSqlParams = [json.pic_message, string, json.pic_src];
//增
connection.query(addSql,addSqlParams,function (err, result) {
if (err) throw err;
console.log('写入成功')
});
}
});
}).on('error', function() {
console.log('获取数据出错!');
});
}
网友评论