js 爬虫抓取网页数据(借助mysql模块保存数据(假设数据库)的基本流程和流程)

优采云 发布时间: 2022-01-12 05:12

  js 爬虫抓取网页数据(借助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" 收录 文章 标题和 文章 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,清空blog表,再次运行,看看表能不能保存javascript相关的数据。

  

  现在去博客园搜索javascript,看看搜索结果是否与表格中的内容对应。呵呵,别看,我一定能配得上的~~

  仅仅爬取一页的内容肯定是不够的。最好能自动爬取其他页面的内容。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线