js 爬虫抓取网页数据(cheerio模块、request模块的基本流程推荐次数推荐(一))
优采云 发布时间: 2022-02-04 21:07js 爬虫抓取网页数据(cheerio模块、request模块的基本流程推荐次数推荐(一))
在node.js中,配合cheerio模块和request模块,可以非常方便的抓取特定URL页面的数据。
一个简单的如下
var request = require('request');
varcheerio = 需要('cheerio');
请求(url,函数(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');
varcheerio = 需要('cheerio');
var key = 'node.js', page = 1;
var url = '#39;+ key +'&p='+ page;
请求(url,函数(错误,res){
if (err) return console.log(err);
var $ =cheerio.load(res.body.toString());
var arr = [];
//内容解析
});
既然URL已经可用,接下来分析该URL对应的页面内容。
页面还是很规整的。
标题 摘要 作者 发帖时间 推荐 评论 浏览量 文章链接
使用浏览器开发工具
发现
...
对应每个文章
点击每一项,有以下内容
class="searchItemTitle" 收录 文章title 和 文章URL 地址
class="searchItemInfo-userName" 收录作者
class="searchItemInfo-publishDate" 收录发布时间
class="searchItemInfo-views" 收录视图
借助cheerio模块解析文章,抓取具体内容
var request = require('request');
varcheerio = 需要('cheerio');
var key = 'node.js', page = 1;
var url = '#39;+ key +'&p='+ page;
请求(url,函数(错误,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');
变量信息 = {
标题:$(title).find('a').text(),
href: $(title).find('a').attr('href'),
作者:$(author).text(),
时间:$(time).text(),
视图:$(view).text().replace(/[^0-9]/ig, '')
};
arr.push(信息);
//打印
console.log('===============================输出开始========== = =================');
console.log(info);
console.log('=============================== 输出结束========= == =================');
});
});
查看代码
你可以运行它看看数据是否被正常抓取。
现在可以将数据数据保存到数据库中。这里以mysql为例,使用mongodb更方便。
借助mysql模块保存数据(假设数据库名为test,表为blog)。
var request = require('request');
varcheerio = 需要('cheerio');
var mysql = require('mysql');
var db = mysql.createConnection({
主机:'127.0.0.1',
用户:'root',
密码:'123456',
数据库:“测试”
});
db.connect();
var key = 'node.js', page = 1;
var url = '#39;+ key +'&p='+ page;
请求(url,函数(错误,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');
变量信息 = {
标题:$(title).find('a').text(),
href: $(title).find('a').attr('href'),
作者:$(author).text(),
时间:$(time).text(),
视图:$(view).text().replace(/[^0-9]/ig, '')
};
arr.push(信息);
//打印
console.log('===============================输出开始========== = =================');
console.log(info);
console.log('=============================== 输出结束========= == =================');
//保存数据
db.query('插入博客集?', info, function(err,result){
如果(错误)抛出错误;
如果(!!结果){
console.log('插入成功');
console.log(result.insertId);
} 否则 {
console.log('插入失败');
}
});
});
});
查看代码
运行并查看数据是否保存到数据库中。
现在可以进行基本的抓取和保存。但是只爬取了一次,只有关键词为node.js页码的URL页面为1。
把关键词改成javascript,页码为1,清空blog表,然后再次运行,看看能不能把javascript相关的数据保存到表中。
现在去博客园搜索javascript,看看搜索结果是否与表格中的内容对应。呵呵,不看,肯定会对应~~
只能爬取一页的内容,这肯定是不够的。自动爬取其他页面的内容会更好。