node之小爬蟲
一.概念
網絡爬蟲(又稱爲網頁蜘蛛,網絡機器人,在FOAF社區中間,更經常的稱爲網頁追逐者),是一種按照一定的規則,自動地抓取萬維網信息的程序或者腳本。另外一些不常使用的名字還有螞蟻、自動索引、模擬程序或者蠕蟲
二.基於https實現一個小爬蟲
其原理就是:通過代碼的方式,去請求這個網站,獲取這個網站的html字符串內容,通過https去請求別的網絡資源(一個對應的url地址其實就是一個網絡資源),若對方網站是http協議,則使用http模塊請求,然後對拉下來的html字符串內容進行各種解析工作,得到想要的數據.
在這裏,我們會使用一個後端的類似於jquyer的包,包名叫做cheerio.
cheerio 可以像jquery那樣去處理html字符串
// 引入https模塊
const https = require("https");
//引入第三方依賴包 cheerio 類似jquery的語法
const cheerio = require("cheerio");
//請求的路徑
const url = "https://www.zhipin.com/shenzhen/";
https.get(url, (res) => {
let raw = "";
//通過req的data事件監聽函數,每當接受到請求體的數據,就累加到raw變量中
res.on("data", (chunk) => {
raw += chunk;
});
//監聽 req 的 end 事件
res.on("end", () => {
findBoss(raw);
});
});
let findBoss = (htmlStr) => {
//裝載整個爬取的內容
let result = [];
//使用cheerio裝載整個html頁面
const $ = cheerio.load(htmlStr);
//類似於jquery的語法,去獲取想要得到的內容
$(".job-menu dl").find('dd').each((index, item) => {
let Name = $(item).find("b").text();
let subName = [];
$(item).find('a').each((k, v) => {
subName.push($(v).text());
});
result.push({
Name,
subName
});
});
console.log(result);
}
最後爬取到的結果爲:
[ { Name: '技術', subName: [ 'Java', 'PHP', 'web前端', '算法工程師' ] },
{ Name: '產品', subName: [ '產品經理', '產品總監', '數據產品經理' ] },
{ Name: '設計', subName: [ 'UI設計師', '平面設計師', '交互設計師' ] },
{ Name: '運營', subName: [ '新媒體運營', '產品運營', '網絡推廣' ] },
{ Name: '市場', subName: [ '市場營銷', '市場推廣', '品牌公關', '策劃經理' ] },
{ Name: '人事', subName: [ '人事/HR', '行政', '財務', '培訓', '績效考覈' ] },
{ Name: '高級管理', subName: [ '總裁/總經理/CEO', '分公司/代表處負責人' ] },
{ Name: '銷售', subName: [ '銷售專員', '銷售經理', '銷售工程師' ] },
{ Name: '媒體', subName: [ '文案', '廣告創意', '編輯', '記者', '媒介經理' ] },
{ Name: '金融', subName: [ '投資經理', '投資總監', '風控', '證券' ] },
{ Name: '教育培訓', subName: [ '課程設計', '教務管理', 'IT培訓' ] },
{ Name: '醫療健康', subName: [ '藥劑師', '營養師', '醫療器械研究' ] },
{ Name: '採購貿易', subName: [ '採購經理', '採購主管', '進出口貿易' ] },
{ Name: '供應鏈/物流', subName: [ '物流專員', '貿易跟單', '供應鏈經理' ] },
{ Name: '房地產/建築', subName: [ '物業管理', '房地產規劃開發' ] },
{ Name: '諮詢/翻譯/法律', subName: [ '企業管理諮詢', '事務所律師' ] },
{ Name: '旅遊', subName: [ '旅遊顧問', '導遊', '旅遊產品開發/策劃' ] },
{ Name: '服務業', subName: [ '酒店前臺', '客房服務員', '髮型師' ] },
{ Name: '生產製造', subName: [ '生產總監', '安全員', '質量管理/測試' ] } ]
我這邊寫的一個小示例是爬取boss直聘職位菜單的數據.那麼,這一個小小的爬蟲就實現了,其實還有很多內容,後面慢慢來擴展.
三.cheerio 第三方模塊
鏈接:https://www.npmjs.com/package/cheerio
cheerio: 簡單理解爲是使用在服務器端的 jquery。保留了 jquery 選擇器的相關功能,去掉了 DOM 操作功能。
1.安裝模塊
$ npm install cheerio
2. 引入
const cheerio =require('cheerio');
3.裝載
const $=cheerio.load('<div class="box">Hello World</div>');
4. 使用響應的API
類似於jquery操作