js抓取网页内容(借助mysql模块保存数据(假设数据库)的基本流程和流程)
优采云 发布时间: 2021-09-12 19:13js抓取网页内容(借助mysql模块保存数据(假设数据库)的基本流程和流程)
在node.js中,有了cheerio模块和request模块,抓取特定URL页面的数据非常方便。
一个简单的如下
var request = require('request');
var cheerio = require('cheerio');
request(url,function(err,res){
if(err) return console.log(err);
var $ = cheerio.load(res.body.toString());
//解析页面内容
});
有了基本的过程,现在试着找一个网址(url)。以博客园的搜索页面为例。
通过搜索关键词node.js
获取以下网址:
点击第二页,网址如下:
分析URL,发现w=? 关键词p=?是要搜索的页码。
带有请求模块的请求 URL
var request = require('request');
var cheerio = require('cheerio');
var key = 'node.js', page = 1;
var url = 'http://zzk.cnblogs.com/s?t=b&w='+ key +'&p='+ page;
request(url, function(err, res) {
if (err) return console.log(err);
var $ = cheerio.load(res.body.toString());
var arr = [];
//内容解析
});
既然URL可用,分析URL对应的页面内容。
页面还是很规律的。
标题摘要作者发表时间推荐评论数量文章link查看数量
借助浏览器开发工具
发现
...
对应每篇文章文章
点击每一项,有以下内容
class="searchItemTitle" 收录文章title 和文章URL 地址
class="searchItemInfo-userName" 收录作者
class="searchItemInfo-publishDate" 收录发布日期
class="searchItemInfo-views" 收录浏览次数
借助cheerio模块分析文章以抓取特定内容
var request = require('request');
var cheerio = require('cheerio');
var key = 'node.js', page = 1;
var url = 'http://zzk.cnblogs.com/s?t=b&w='+ key +'&p='+ page;
request(url, function(err, res) {
if (err) return console.log(err);
var $ = cheerio.load(res.body.toString());
var arr = [];
//内容解析
$('.searchItem').each(function() {
var title = $(this).find('.searchItemTitle');
var author = $(this).find('.searchItemInfo-userName a');
var time = $(this).find('.searchItemInfo-publishDate');
var view = $(this).find('.searchItemInfo-views');
var info = {
title: $(title).find('a').text(),
href: $(title).find('a').attr('href'),
author: $(author).text(),
time: $(time).text(),
view: $(view).text().replace(/[^0-9]/ig, '')
};
arr.push(info);
//打印
console.log('============================= 输出开始 =============================');
console.log(info);
console.log('============================= 输出结束 =============================');
});
});
查看代码
可以运行一下,看看数据是否正常捕获。
现在有数据数据,可以保存到数据库中。这里以mysql为例,使用mongodb更方便。
借助mysql模块保存数据(假设数据库名为test,表为blog)
var request = require('request');
var cheerio = require('cheerio');
var mysql = require('mysql');
var db = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: '123456',
database: 'test'
});
db.connect();
var key = 'node.js', page = 1;
var url = 'http://zzk.cnblogs.com/s?t=b&w='+ key +'&p='+ page;
request(url, function(err, res) {
if (err) return console.log(err);
var $ = cheerio.load(res.body.toString());
var arr = [];
//内容解析
$('.searchItem').each(function() {
var title = $(this).find('.searchItemTitle');
var author = $(this).find('.searchItemInfo-userName a');
var time = $(this).find('.searchItemInfo-publishDate');
var view = $(this).find('.searchItemInfo-views');
var info = {
title: $(title).find('a').text(),
href: $(title).find('a').attr('href'),
author: $(author).text(),
time: $(time).text(),
view: $(view).text().replace(/[^0-9]/ig, '')
};
arr.push(info);
//打印
console.log('============================= 输出开始 =============================');
console.log(info);
console.log('============================= 输出结束 =============================');
//保存数据
db.query('insert into blog set ?', info, function(err,result){
if (err) throw err;
if (!!result) {
console.log('插入成功');
console.log(result.insertId);
} else {
console.log('插入失败');
}
});
});
});
查看代码
运行它看看数据是否保存在数据库中。
现在可以进行基本的抓取和保存。但是只爬取一次,只能爬取关键词为node.js页码为1的URL页面。
把关键词改成javascript,页码为1,清空博客表,再运行看看表中是否可以保存javascript相关的数据。
现在去博客园搜索javascript,看看搜索结果是否与表格中的内容相对应。哈哈,不看,绝对可以对应~~
只能抓取一个页面的内容,这绝对是不够的。最好能自动抓取其他页面的内容。