最近受疫情影响迟迟不能复工,在家时与朋友寒暄聊到最近在做什么对方说起了爬虫这个东西,加上自己一时兴起,花了2个多小时简单研究了一下,简单入个门。在此记录一下。
1.开发环境,所需依赖库。
//搭建koa2 脚手架
npm install -g koa-generator
//新建项目
koa2 -e ReptileDemo
//安装基础依赖库
cd ReptileDemo
npm install
//三方解析目标网站的库。
cnpm install cheerio
2.爬取2个网站的数据。
1.https://www.imooc.com/search/?words=mongodb 为慕课网搜索mongodb结果集。
2.https://www.csdn.net/ 为CSDN 首页右侧今日推荐栏目
const cheerio = require('cheerio');
const http = require('https');
async function crawlingMKWImpl() {
return new Promise((resolv) => {
var strHtml = "";
var results = [];
http.get('https://www.imooc.com/search/?words=mongodb', function (res) {
res.on('data', function (chunk) {//监听事件 传输
strHtml += chunk;
})
res.on('end', function () {//数据传输完
var $ = cheerio.load(strHtml);//cheerio模块开始处理 DOM处理
$('.search-course-list > div').each((item, i) => {//遍历处理需要爬取的数据
var job = {};
//爬取内容时,一定要注意标签结构。按标签结构一层一层获取。
job.title = $(i).find(".item-detail > a").text().trim();
job.desc = $(i).find(".item-detail > p").text().trim();
//当一个div中有多个span标签及其他标签且没有选择器时,就要选择下标获取。eq(0)表示处于第一个span标签的内容。
job.teacher = $(i).find(".item-detail > div > span > a").eq(0).text().trim();
job.class = $(i).find(".item-detail > div > span").eq(1).text().trim();
job.viewsNumber = $(i).find(".item-detail > div > span").eq(2).text().trim();
job.tag = $(i).find(".item-detail > div > a > span").text().trim();
results.push(job);
})
console.log(results);
resolv(results);
})
})
})
}
获取结果:
3,获取CSDN首页右侧今日推荐文章
async function crawlingCSDNImpl() {
return new Promise((resolv) => {
var strHtml = "";
var results = [];
http.get("https://www.csdn.net/", function (res) {
res.on('data', function (res) {
strHtml += res;
})
res.on('end', function () {
var $ = cheerio.load(strHtml);
$('.feed_company > ul > li').each((item, i) => {
var job = {};
job.img = $(i).find(".img_box > a").attr('href');
job.name = $(i).find(".content > h3").text().trim();
results.push(job);
})
console.log(results)
resolv(results)
})
})
})
}
结果:
其实并没有什么难度,只是要理清楚HTML文档结构,一层一层把要剥离的数据文档结构写好就行了。