NodeJs實(shí)現(xiàn)簡(jiǎn)單的爬蟲功能案例分析
1.爬蟲:爬蟲,是一種按照一定的規(guī)則,自動(dòng)地抓取網(wǎng)頁信息的程序或者腳本;利用NodeJS實(shí)現(xiàn)一個(gè)簡(jiǎn)單的爬蟲案例,爬取Boss直聘網(wǎng)站的web前端相關(guān)的招聘信息,以廣州地區(qū)為例;
2.腳本所用到的nodejs模塊
express 用來搭建一個(gè)服務(wù),將結(jié)果渲染到頁面
swig 模板引擎
cheerio 用來抓取頁面的數(shù)據(jù)
requests 用來發(fā)送請(qǐng)求數(shù)據(jù)(具體可查:https://www.npmjs.com/package/requests)
async 用來處理異步操作,解決請(qǐng)求嵌套的問題,腳本中只使用了async.whilst(test,iteratee,callback),具體可見:https://caolan.github.io/async/
3.實(shí)現(xiàn)流程:
首先先獲取到所爬取頁面的URL,打開boss直聘網(wǎng)站,搜索web前端既可以獲取到 https://www.zhipin.com/c101280100-p100901/?page=1&ka=page-next

然后通過Chrome瀏覽器打開F12,獲取到信息中多對(duì)應(yīng)的dom節(jié)點(diǎn),即可知道想要獲取信息;

4.代碼實(shí)現(xiàn)
目錄結(jié)構(gòu):

app.js
var cheerio = require('cheerio');
var requests = require('requests');
var async = require('async');
var express = require('express');
var swig = require('swig');
var app = express();
swig.setDefaults({cache:false});
app.set('views','./views/');
app.set('view engine','html');
app.engine('html',swig.renderFile);
app.get('/',function(req,res,next){
var page = 1; //當(dāng)前頁數(shù)
var list = []; //保存記錄
async.whilst(
function(){
return page < 11;
},
function(callback){
requests(`https://www.zhipin.com/c101280100-p100901/?page=${page}&ka=page-next`)
.on('data',function(chunk){
var $ = cheerio.load(chunk.toString());
$('.job-primary').each(function(){
var company = $(this).find('.info-company .company-text .name').text();
var job_title = $(this).find('.info-primary .name .job-title').text();
var salary = $(this).find('.info-primary .name .red').text();
var description = $(this).find('.info-company .company-text p').text();
var area = $(this).find('.info-primary p').text();
var item = {
company:company,
job_title:job_title,
salary:salary,
description:description,
area:area
};
list.push(item);
});
page++;
callback();
}).on('end',function(err){
if(err){
console.log(err);
}
if(page==10){
res.render('index',{
lists:list
});
}
});
},
function(err){
console.log(err);
}
);
});
//監(jiān)聽
app.listen(8080);
view/index.html頁面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style>
table{
width:1300px;
border:1px solid #ccc;
border-collapse: collapse;
text-align: center;
margin:0 auto;
}
td,tr,th{
border:1px solid #ccc;
border-collapse: collapse;
}
tr{
height:30px;
line-height: 30px;
}
</style>
<body>
<table>
<thead>
<tr>
<th>公司名稱</th>
<th>公司地址</th>
<th>薪資</th>
<th>公司描述</th>
<th>崗位名稱</th>
</tr>
</thead>
<tbody>
{% for list in lists %}
<tr>
<td>{{list.company}}</td>
<td>{{list.area}}</td>
<td>{{list.salary}}</td>
<td>{{list.description}}</td>
<td>{{list.job_title}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</body>
</html>
5.啟動(dòng)
直接通過 node app.js啟動(dòng)即可;
6.運(yùn)行結(jié)果(http://localhost:8080),只截取部分?jǐn)?shù)據(jù)

總結(jié)
以上所述是小編給大家介紹的NodeJs實(shí)現(xiàn)簡(jiǎn)單的爬蟲功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
node?NPM庫(kù)qs?iconv-lite字符串編碼轉(zhuǎn)換及解析URL查詢學(xué)習(xí)
這篇文章主要為大家介紹了node?NPM庫(kù)之qs解析URL查詢字符串及iconv-lite字符串編碼轉(zhuǎn)換學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
實(shí)現(xiàn)一個(gè)完整的Node.js RESTful API的示例
本篇文章主要介紹了實(shí)現(xiàn)一個(gè)完整的Node.js RESTful API的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
淺談Node新版本13.2.0正式支持ES Modules特性
這篇文章主要介紹了淺談Node新版本13.2.0正式支持ES Modules特性,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
Node.js中使用Log.io在瀏覽器中實(shí)時(shí)監(jiān)控日志(等同tail -f命令)
這篇文章主要介紹了Node.js中使用Log.io在瀏覽器中實(shí)時(shí)監(jiān)控日志,Log.io等同于tail -f命令,但更強(qiáng)大,需要的朋友可以參考下2014-09-09
基于websocket實(shí)現(xiàn)簡(jiǎn)單聊天室對(duì)話
這篇文章主要為大家詳細(xì)介紹了基于websocket實(shí)現(xiàn)簡(jiǎn)單聊天室對(duì)話,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
在nodejs中創(chuàng)建child process的方法
這篇文章主要介紹了在nodejs中創(chuàng)建child process的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
nodejs實(shí)現(xiàn)黑名單中間件設(shè)計(jì)
最近寫的項(xiàng)目中涉及到防止灌水的功能,于是設(shè)計(jì)了黑名單中間件,跟大家分享一下,同時(shí)也希望大家有好的建議能夠拍磚.2014-06-06

